NSLayout Constraint隐藏UIView

时间:2017-04-02 22:51:24

标签: ios swift xcode uiview storyboard

我正在尝试重新创建这个,但我无法弄清楚如何挂钩这个约束:

故事板中的RootViewController存在约束,其中未选中“已安装”复选框:

enter image description here

但看起来它的关系是RootViewController,即使它隐藏了第二个容器视图:

enter image description here

我尝试使用IBOutlet在代码中创建@IBOutlet weak var hideCameraConstraint: NSLayoutConstraint!,然后将连接拖到故事板中的RootViewController,但这不起作用。

但是我需要使用约束,因为在代码中,摄像机可见性是用它设置的:

fileprivate func setCameraVisibility(_ visible: Bool) {
    hideCameraConstraint.isActive = !visible
    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0, options: .beginFromCurrentState, animations: {
        self.view.layoutIfNeeded()
    }, completion: nil)
}

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

你必须像这样使用

    hideCameraConstraint.constant += anyValue

在约束中,您必须设置整数值而不是布尔值。

答案 1 :(得分:1)

如果您正在寻找隐藏和取消隐藏视图的约束,请使用以下方法:

  1. 使用height == 0添加标识符hideViewIdentifier
  2. 设置约束
  3. 将身高约束优先级设为250
  4. 将优先级设置为与900冲突的约束(在您的情况下,这将是底部布局或实际高度)
  5. 然后更新优先级以隐藏250以显示视图和990以隐藏视图

    之间的约束
    //@update
    - (void)upadteView:(UIView *)view hide:(BOOL)hide {
        [view.constraints enumerateObjectsUsingBlock:^(__kindof NSLayoutConstraint * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if ([obj.identifier isEqual:@"hideViewIdentifier"]) {
                obj.priority = (hide) ? 990 : 250;
                *stop = YES;
                return;
            }
        }];
    }