製圖約束我,我想是這樣的一個觀點:與TopLayoutGuide
|---------------|
| | <- navBar
|---------------|
| | <- topView
|---------------|
| |
| |
| |
|---------------|
一切我想要的是堅持topView.top到navBar.bottom。我決定去與地圖製圖學與執行以下代碼(儘量堅持MVC OFC):
在我UIViewController
子類:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
aView?.topLayoutGuide = self.topLayoutGuide // where aView is my subclass of UIView, inserted in loadView method
}
在我UIView
子類:
var topLayoutGuide: UILayoutSupport?
override func updateConstraints() {
var constraint = NSLayoutConstraint?()
layout(topView) { (topView) in
constraint = topView.top == topView.superview!.top
}
topView.superview!.removeConstraint(constraint!)
layout(topView) { topView in
topView.top == topView.superview!.top + (self.topLayoutGuide?.length ?? 0)
topView.height == 67
topView.left == topView.superview!.left
topView.width == topView.superview!.width
}
super.updateConstraints()
}
的問題是我收到以下日誌,我不知道如何解決它:
Unable to simultaneously satisfy constraints.
[...]
(
"<NSLayoutConstraint:0x7fe6a64e4800 V:|-(64)-[UIView:0x7fe6a6505d80] (Names: '|':MyApp.MyView:0x7fe6a360d4c0)>",
"<NSLayoutConstraint:0x7fe6a3538a80 V:|-(0)-[UIView:0x7fe6a6505d80] (Names: '|':MyApp.MyView:0x7fe6a360d4c0)>"
)
似乎我需要一些幫助。如何正確地做到這一點?我不想在UIViewController
中實施約束,我不想使用Storyboards
。
感謝您的幫助!
我剛剛從'autolayout'辭職臨時工,目前我在'layoutSubviews'中設置了框架 - 這樣''topLayoutGuide'沒有問題。我無法測試您的解決方案,但我嘗試了一些類似的結果。我接受這個答案,因爲它可能是適當的解決方案;)。 – Vive
對我有意義!我想這個問題有點陳舊,但是我昨天在處理這個相同的問題,遇到了你的問題,上面的代碼就是我用來處理它的。感謝接受! :) – bryanjclark