目前我的viewcontroller如下所示
--highestView--
--topView--
--tableView--
当我向下滚动时,我想让topView
消失,这意味着tableView
将完全低于highestView
。
所以在向上滚动时,我希望它们回到原来的视图,如上所述。
我的代码如下: -
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat scrollPos = self.tableView.contentOffset.y ;
if(scrollPos >= self.currentOffset ){
//Fully hide your toolbar
[UIView animateWithDuration:2.25 animations:^{
self.topView.hidden = YES;
self.topViewTopConstraint.active = NO;
self.theNewConstraint2.active = NO;
self.theNewConstraint = [NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.highestView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];
self.theNewConstraint.active = YES;
}];
} else {
//Slide it up incrementally, etc.
self.theNewConstraint.active = NO;
self.topView.hidden = NO;
self.topViewTopConstraint.active = YES;
self.theNewConstraint2 = [NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.topView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];
self.theNewConstraint2.active = YES;
//self.topView.hidden = NO;
}
}
向下滚动的工作原理与我想要的完全一样,但向上滚动失败。目前,topView
在向上滚动时显示在tableView
的后面。我该如何解决这个问题?
答案 0 :(得分:0)
设置topView的高度cosntraint,并在想要隐藏它时将其设为0!
考虑使用Masonry来应用约束。
添加高度约束:
[toppView mas_makeConstraints:^(MASConstraintMaker *make) {
make. mas_height.equalTo(100); //just make this 0 when you want to hide the topView
}];
答案 1 :(得分:0)
您可以使用XIB约束来实现此目的
HeightView
< - > TopView
< - > TableView
这三个视图通过Vertical Space
和Bottom Space
约束相互连接。
然后将高度约束添加到TopView
并将其设为IBOutlet
:
@IBOutlet weak var topViewHeightCon: NSLayoutConstraint!
然后您自己的代码可以重复使用:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat scrollPos = self.tableView.contentOffset.y;
if(scrollPos >= self.currentOffset ){
topViewHeightCon.constant = 0
UIView.animate(withDuration: 0.3, animations: {
self.view.layoutIfNeeded()
})
} else {
topViewHeightCon.constant = originalHeight
UIView.animate(withDuration: 0.3, animations: {
self.view.layoutIfNeeded()
})
}
}