如何以编程方式设置这些约束?

时间:2017-05-31 14:47:16

标签: ios objective-c

目前我的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的后面。我该如何解决这个问题?

2 个答案:

答案 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 SpaceBottom 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()
    })
  }
}