美文网首页
ScrollView在固定底部控件(无论是否滚动)

ScrollView在固定底部控件(无论是否滚动)

作者: LX2014 | 来源:发表于2018-05-11 15:53 被阅读9次

这里要实现的效果是,底部的两个按钮无论是否滚动都固定在底部。如果滚动就跟随ScrollView滚动,如果屏幕够长不滚动,就留出TextView到Set Timer间的距离。
问题:如果ScrollView的contentSize高度小于ScrollView的高度,那么说明不能滚动,按默认约束底部的两个按钮到TextView的距离会是固定的,距离底部的距离会变大。


image.png

ScrollView中的控件都是从上至下,从左往右的填充ContentSize。
解决的办法是:判断ScrollView的contentSize高度是否大于ScrollView的Bounds的高度。如果大于说明可以滚动,就按设置的约束滚动,不做处理;如果ScrollView的contentSize高度小于ScrollView的高度,那么不能滚动。在代码中拖出TextView到Set timer间的约束textViewToSetTimerConstraint,在代码中设置textViewToSetTimerConstraint.constant为ScrollView高度与contentSize高度的差,那么此时contentSize就刚好是ScrollView的size。并且变化的约束高度是Set Timer顶部的约束。
需要注意的是,在ScrollView的contentSize时,需要在viewDidLayoutSubviews方法中设置。在viewDidLoad和viewWillAppear方法中contentSize都为0,拿不到实际的contentSize。另外viewDidLayoutSubviews会执行两次,所以需要判断。

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    //为了使按钮无论是否可以滚动都能固定在底部
    if ((self.bgScrollView.contentSize.height < self.bgScrollView.bounds.size.height) && self.bgScrollView.contentSize.height > 0) { //不能滚动时
        
        CGFloat height = self.bgScrollView.bounds.size.height - self.bgScrollView.contentSize.height;
        _textViewToTopBtnConstraint.constant = _textViewToTopBtnConstraint.constant + height;
    }
}

相关文章

网友评论

      本文标题:ScrollView在固定底部控件(无论是否滚动)

      本文链接:https://www.haomeiwen.com/subject/dkifdftx.html