У меня есть UINavigationController
, у которого есть мой пользовательский ViewController
с tableView
в нем, который занимает весь экран.анимирующий вид сверху uitableview
Я хочу надавить на tableView
и открыть меню настроек всего несколькими парами. Мой SettingsView.xib
Я создал в отдельном наконечнике, который есть 320 x 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)
}
Эта часть скользит вниз, как я ожидал. Затем я добавил настройкиView следующим образом:
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
бы с ним.
Это, похоже, не так, и я не могу понять, почему. Я не очень много делал с анимационными представлениями, когда задействованы ограничения. Я правильно настроил это? Нужно ли мне удалить одно из ограничений, а затем добавить другое? Заранее спасибо.