微信小程序完美解决scroll-view高度自适应问题

第一种情况,scroll-view占据整屏

image

scroll-view {

    height: 100vh;

}

第二种情况,scroll-view自适应页面剩余高度

image
xml文件

  
    
      

wxss文件

.box {
    display: flex;
    flex-direction:column;
    height:100vh;
    overflow:hidden;
}
.box-head {
    flex-shrink: 0;
    height: 50px;
}
.box-scroll {
    flex: 1;
    height: 1px;
}

flex:1 高度依然不会自适应加一个默认高度1px就可以自适应了

通用组件化处理

list.wxml


    

    
    
        {{ finishedText }}
    

    
    
        
    

list.scss(需编译成list.wxss)

.list {
    &-scroll {
        flex: 1;
        height: 100vh;

        &--auto {
            height: 1px;
        }
    }

    &-loading {
        margin: 10px 0;
        text-align: center;

        &__text {
            font-size: 16px;
            color: #a6a6a6;
            line-height: 1;
        }
    }
}

list.js

// components/list/list.js
Component({
    externalClasses: ["class"],
    options: {
        virtualHost: true, // 组件虚拟化
    },

    /**
     * 组件的属性列表
     */
    properties: {
        // 加载状态
        loading: {
            type: Boolean,
            value: false,
        },
        // 加载完成
        finished: {
            type: Boolean,
            value: false,
        },
        // 加载完成文字
        finishedText: {
            type: String,
            value: "没有更多了",
        },
        // 自动初始化获取数据
        autoInit: {
            type: Boolean,
            value: true,
        },
        // flex自定适应高度
        autoHeight: {
            type: Boolean,
            value: false,
        },
    },

    /**
     * 组件的方法列表
     */
    methods: {
        /**
         * 滚动到底部阈值
         */
        scrolltolower() {
            // 退出执行
            if (
                this.data.emptyText || // 没有数据
                this.data.loading || // 正在加载
                this.data.finished // 加载完成
            ) {
                return;
            }

            this.setData({
                loading: true,
            });
            this.triggerEvent("load");
        },
    },

    /**
     * 组件声明周期
     */
    lifetimes: {
        attached() {
            // 自动初始化
            if (this.data.autoInit) {
                this.scrolltolower();
            }
        },
    },
});

组件化后一定要设置组件虚拟化。否则高度还是不会自适应

list.json

"component": true,
    "usingComponents": {
        "van-loading": "@vant/weapp/loading/index"
    }

需要安装van-loading或者自己写一个loading效果

使用

全屏

自适应

你可能感兴趣的:(微信小程序,高度自适应)