2017-04-02 52 views
0

我試圖重建,但我無法弄清楚如何掛鉤該約束了:這裏的「安裝」複選框NSLayout約束隱藏的UIView

有一個約束在故事板RootViewController未選中:

enter image description here

但它看起來像它的關係是,即使它隱藏了第二集裝箱查看RootViewController

enter image description here

我試過在@IBOutlet weak var hideCameraConstraint: NSLayoutConstraint!的代碼中創建IBOutlet,然後拖動連接到故事板中的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) 
} 

任何想法?謝謝!

+0

而不是設置isActive的,你可以嘗試修改常量屬性? – carlos21

+0

你想隱藏並取消隱藏某些操作的視圖嗎? – Nazir

+0

@ carlos21我真的只是想弄清楚如何在故事板上添加該約束。你知道怎麼做嗎? – SRMR

回答

1

如果您正在尋找隱藏和取消隱藏與約束視圖中使用這樣的方法:

  1. 集約束與height == 0附加標識hideViewIdentifier
  2. 一套高度約束優先250
  3. 設置優先級,以衝突的約束到900(在你的情況下,這將是底部佈局或實際高度)

然後更新優先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; 
     } 
    }]; 
} 
+0

這是我認爲我期待的事情,讓我今天嘗試一下吧! – SRMR

+0

我想弄清楚如何手動拖動約束仍然 – SRMR

+0

你是什麼意思與拖動? – Nazir

2

你必須使用類似這樣的

hideCameraConstraint.constant += anyValue 

在約束你必須設置整數值不是一個布爾值。

+0

感謝您的迴應!但是我怎樣才能在Storyboard中綁定約束呢? – SRMR

+0

@SRMR我給你的例子假設你在故事板中使用UIView並將其前導約束設置爲50,那麼你必須將這些約束附加到你創建的約束上,即hideCameraConstraint。現在在程序中,您可以更改您的UIView的主要約束。例如 - hideCameraConstraint.constant = 20,它表示現在你的UIView從20開始不是50,這樣你就可以通過編程來改變約束。如果你喜歡我的回答,請提高我的答案。 –

+0

對,我在尋找的是如何連接我在故事板中尋找的約束條件 – SRMR