如何隐藏底部视图时使用autolayout将全帧分配给topview

时间:2015-11-20 07:34:27

标签: ios iphone autolayout

我在Main视图中有两个UIViews垂直对齐,有业务逻辑,如果usertype A被登录需要显示两个视图,如果usertype B登录需要只显示顶视图并隐藏底部视图但topview应该得到总框架还有什么人可以建议我如何用Autolayout实现?。

2 个答案:

答案 0 :(得分:0)

您应该为底部视图定义高度约束。

主要思想是为您的目的改变约束。只需在代码中创建高度插座,并在需要隐藏时将其设置为0(如果需要,可选择将hidden属性设置为YES)

故事板步骤:

  1. 为顶视图添加前导,尾随,顶部和底部约束 enter image description here

  2. 为底部视图添加前导,尾部,高度和底部约束 enter image description here

  3. 您的约束应如下所示: enter image description here
  4. 最后一步 - 将高度的出口拖到视图控制器,以便获取更改它的常量

    希望这有帮助

答案 1 :(得分:0)

如果您的部署目标是iOS 9或更高版本,最简单的方法是将视图放在UIStackView中:

demo with stack view

我将两个视图(加上工具栏)放在垂直堆栈视图中。我将每个视图的前沿和后沿约束到堆栈视图,并将顶视图和底视图约束为具有相等的高度。然后我将等高约束的优先级设置为249(相当低的优先级)。如果您不想要相同的高度,则可以在两个视图都可见时设置所需的任何高度限制。只需将它们设置为低优先级,这样当只显示一个视图时,堆栈视图可以覆盖它们。

即使使用动画,隐藏和显示视图也很容易。就这么简单:

@interface ViewController ()
@property (strong, nonatomic) IBOutlet UIView *topView;
@property (strong, nonatomic) IBOutlet UIView *bottomView;

@end

@implementation ViewController

- (IBAction)hideTop:(id)sender {
    [UIView animateWithDuration:0.3 animations:^{
        self.topView.hidden = YES;
        self.bottomView.hidden = NO;
    }];
}

- (IBAction)hideBottom:(id)sender {
    [UIView animateWithDuration:0.3 animations:^{
        self.bottomView.hidden = YES;
        self.topView.hidden = NO;
    }];
}

- (IBAction)showAll:(id)sender {
    [UIView animateWithDuration:0.3 animations:^{
        self.topView.hidden = NO;
        self.bottomView.hidden = NO;
    }];
}

@end