Bubu Blog: ~/misc $ ls

scrollview 高度

微信小程序的 scroll-view 组件必须传一个指定高度才能正常使用。

https://cloud.tencent.com/developer/article/1972795

从上到下分别为:tabtitlescroll-view,这三个组件中间还有两个 10px 的 margin。

需要注意的是计算用的单位都是 px,不是小程序的 rpx。因为下面调用接口获取可用屏幕高度时得到的就是 px 。

计算 scroll-view 的高度的公式如下:

Height(scroll-view) = 页面可用高度 - tab 高度 - title 高度 - 2*10(margin 大小)

使用 wx.getSystemInfoSync() 可以得到设备的各种信息,其中页面可用高度是 windowHeight

一般 UI 库都会讲 tab 组件设置为固定高度,而 title 组件则用户自定义。

如果这些都不是常量,可以使用微信提供的相关 API 来获取元素高度。

let query = wx.createSelectorQuery().in(this)
query.select('.title').boundingClientRect(function(res) {
    //在这里做计算,res里有需要的数据
}).exec()

注意在组件 component 里使用的话,要用 wx.createSelectorQuery().in(this),将选择器的选取范围更改为自定义组件 component 内。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点。)

如果要同时计算多个,可以采用如下代码:

computeScrollViewHeight() {
  let that = this
  let query = wx.createSelectorQuery().in(this)
  query.select('.search').boundingClientRect()
  query.select('.title-wrapper').boundingClientRect()
  query.exec(res => {
    let searchHeight = res[0].height
    let titleHeight = res[1].height
    let windowHeight = wx.getSystemInfoSync().windowHeight
    let scrollHeight = windowHeight - searchHeight - titleHeight - 30 - 5 - 50 
    this.setData({ scrollHeight: scrollHeight})
  })
},

注意 createSelectorQuery 适用的生命周期为 ready。往前是获取不了数据的。