Ios addConstraint只工作一次
我正在为iOS8制作一个自定义键盘,苹果开发者文档上说,在屏幕上绘制初始主视图后,您可以随时更改自定义键盘的高度。它说要做到这一点,应该使用.addConstant()方法 这里有一个链接: 我用的是斯威夫特。键盘的初始高度为215像素。我有一个向上滑动的手势,将高度增加到350像素。这和预期的一样。以及向下滑动,将高度更改为300像素 这一切都正常,但问题是它只工作一次。我向上滑动,高度增加,向下滑动,高度减少,但是如果我再次向上滑动,什么也不会发生。如果我再刷下去,什么也不会发生 所以,如果有人能看看我的两个函数,告诉我我做错了什么,我将不胜感激 代码如下:Ios addConstraint只工作一次,ios,xcode,swift,autolayout,ios8,Ios,Xcode,Swift,Autolayout,Ios8,我正在为iOS8制作一个自定义键盘,苹果开发者文档上说,在屏幕上绘制初始主视图后,您可以随时更改自定义键盘的高度。它说要做到这一点,应该使用.addConstant()方法 这里有一个链接: 我用的是斯威夫特。键盘的初始高度为215像素。我有一个向上滑动的手势,将高度增加到350像素。这和预期的一样。以及向下滑动,将高度更改为300像素 这一切都正常,但问题是它只工作一次。我向上滑动,高度增加,向下滑动,高度减少,但是如果我再次向上滑动,什么也不会发生。如果我再刷下去,什么也不会发生 所以,如
// IBActions
@IBAction func action1(sender: AnyObject) {
if topboxvisible == false {
topboxvisible = true
UIView.animateWithDuration(0.08, delay: 0, options: .CurveEaseIn, animations: {
self.topbox.frame.offset(dx: 0, dy: 40)
}, completion: nil)
}
let expandedHeight:CGFloat = 300
let heightConstraint = NSLayoutConstraint(item:self.view,
attribute: .Height,
relatedBy: .Equal,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 0.0,
constant: expandedHeight)
self.view.removeConstraint(heightConstraint)
self.view.addConstraint(heightConstraint)
}
@IBAction func action2(sender: AnyObject) {
if topboxvisible == true {
topboxvisible = false
UIView.animateWithDuration(0.08, delay: 0, options: .CurveEaseOut, animations: {
self.topbox.frame.offset(dx: 0, dy: -40)
}, completion: nil)
}
let expandedHeight:CGFloat = 350
let heightConstraint = NSLayoutConstraint(item:self.view,
attribute: .Height,
relatedBy: .Equal,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 0.0,
constant: expandedHeight)
self.view.removeConstraint(heightConstraint)
self.view.addConstraint(heightConstraint)
}
您的
removeConstraint
调用没有做任何事情,因为您刚才创建的约束(在前一行代码中)不在视图中。所以你在这里做的是每次都添加更多的约束,从我所看到的。我想这会导致多个冲突约束。在运行代码时,您是否看到控制台日志中弹出NSConstraint警告
尝试以下操作:提前创建两个高度约束,并将它们存储在实例变量中。在操作1中,删除350高约束,然后添加300高约束。在操作2中,移除300,添加350。当我运行键盘时,控制台是空白的,即使我上下滑动以创建约束。另外,当我将NSLayoutConstraint置于iAction之外时,它会说,KeyboardViewController没有名为“view”的成员。对不起,如果这是一个错误!扩展的日志可能不会显示在控制台中,您需要在窗口->设备中查看它。