2017-08-29 119 views
0

我在我的superView中創建了2個按鈕,現在我想根據用戶角色更改@IBOutlet weak var bottomLayOut: NSLayoutConstraint!SWIFT:如何更新StoryBoard中的NSLayoutConstraint?

示例如下:如果用戶是代理角色,但不是教師角色,我希望將NSLayoutConstraint的第二項從教師輸入.bottom更新爲AgentEntry按鈕的底部。

enter image description here 是那個posible?

更新:

輪流translatesAutoresizingMaskIntoConstraints解決這個真: 如:teacherBtn.translatesAutoresizingMaskIntoConstraints = true 比,我們可以同時使用約束和代碼改變teacherBtn的框架

+0

只是想知道,爲什麼不改變基於角色的按鈕名稱和顏色,而不是改變約束? –

+0

2按鈕可以在同一時間顯示 – Neko

+0

讓我明白一點。讓我們說,用戶角色是老師,所以你想要顯示頂部的教師按鈕和底部的代理按鈕,不是嗎? –

回答

1

兩種方式我能想到做這一關我的頭頂:

  1. 以編程方式設置約束。創建一個包含按鈕上的電流約束的屬性,然後你可以做沿東西線(免責聲明:寫在Chrome中,可能包含錯別字,根據需要編輯):

`如果讓約束=自我。 buttonConstraints { NSLayoutConstraint.deactivate(約束) }

let views: [String : UIView] = ["Agent" : self.agentButton, "Teacher" : self.teacherButton] 

let newConstraints: [NSLayoutConstraint] = { 
    switch role { 
    case .teacherAndAgent: 
     self.teacherButton.isHidden = false 
     self.agentButton.isHidden = false 
     return NSLayoutConstraint.constraints(withVisualFormat: "V:[agent]-[teacher]-|", metrics: nil, views: views) 
    case .teacherOnly: 
     // you get the idea 
    case .agentOnly: 
     // ditto 
    } 
}() 

NSLayoutConstraint.activate(newConstraints) 
self.buttonConstraints = newConstraints` 
  • 什麼可能是簡單的,雖然是使用UIStackView握住你的按鈕。至少在當前的macOS上,NSStackView會根據它的哪些視圖隱藏來自動調整佈局。如果iOS上的UIStackView的行爲方式相同,它可能會爲您做很多工作,而無需手動佈局約束。
  • +0

    我認爲StackView是一個好主意〜 – Neko

    相關問題