ScrollView在固定底部控件(无论是否滚动)
2018-05-11 本文已影响9人
LX2014
这里要实现的效果是,底部的两个按钮无论是否滚动都固定在底部。如果滚动就跟随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;
}
}