我有一個UINavigationController
有我的自定義ViewController
與tableView
在它佔用整個屏幕。動畫在uitableview之上的視圖
我想按下tableView
並顯示一個只有幾件物品的設置菜單。我的SettingsView.xib
我在一個320×90的單獨筆尖中創建,其中只有一個UISegmentedControl
。
我有一個NSLayoutConstraint
的插座,我在tableView
和頂部佈局指南之間創建。當按下我的settingsButton
,我這樣做
func showSettings(sender: UIBarButtonItem) {
println(String(format: "%@", NSStringFromCGRect(settingsView.frame)))
println(String(format: "tableview %@", NSStringFromCGRect(tableView.frame)))
isSettingsOpen = !isSettingsOpen
settingsHeightConstraint.constant = isSettingsOpen ? 90.0 : -64.0
UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.4, initialSpringVelocity: 8.0, options: .CurveEaseIn, animations: {
self.view.layoutIfNeeded()
}, completion: nil)
}
那部分滑下如我所料。然後我添加settingsView像這樣:
lazy var settingsView: UIView = self.initializeSettingsView()
func initializeSettingsView() -> UIView {
let nib = UINib(nibName: "SettingsView", bundle: nil)
let nibView = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return nibView;
}
// in viewDidLoad
settingsView.center.y -= self.settingsView.frame.height
view.addSubview(settingsView)
var constraints = [NSLayoutConstraint]()
constraints.append(NSLayoutConstraint(item: settingsView, attribute: NSLayoutAttribute.Bottom, relatedBy: .Equal, toItem: tableView, attribute: .Top, multiplier: 1.0, constant: 0.0)) // this constraint seems to be the problem one
constraints.append(NSLayoutConstraint(item: settingsView, attribute: .Left, relatedBy: .Equal, toItem: tableView, attribute: .Left, multiplier: 1.0, constant: 0.0))
constraints.append(NSLayoutConstraint(item: settingsView, attribute: .Right, relatedBy: .Equal, toItem: tableView, attribute: .Right, multiplier: 1.0, constant: 0.0))
NSLayoutConstraint.activateConstraints(constraints)
然後我得到不明確的佈局。我知道我嘗試製作動畫的高度限制以及我發表評論的第一個約束是相互衝突的,因爲如果我將其中的一行註釋掉,我不會收到錯誤消息。
我試圖與第一個約束做的就是已在settingsView
「釘」的tableView
,使道路的邊緣,當我動畫tableView
向下移動由90.0則settingsView
會去用它。
這似乎並非如此,我不明白爲什麼。在涉及約束條件時,我對動畫視圖並沒有做太多的工作。我是否正確設置了它?我是否需要刪除其中一個約束,然後添加另一個約束?提前致謝。