【发布时间】:2015-09-07 10:56:33
【问题描述】:
我有一个UINavigationController,其中包含我的自定义ViewController,其中tableView 占据了整个屏幕。
我想按下tableView 并显示一个只有几个项目的设置菜单。我的 SettingsView.xib 我在一个单独的 320 x 90 笔尖中创建,其中只有一个 UISegmentedControl。
我在tableView 和顶部布局指南之间创建了NSLayoutConstraint 的Outlet。当我的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 然后@987654335 @ 会同意的。
这似乎不是这样,我不知道为什么。当涉及约束时,我并没有真正对动画视图做太多事情。我设置正确了吗?我是否需要删除其中一个约束,然后再添加一个不同的约束?
【问题讨论】:
标签: ios swift autolayout