Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios addConstraint只工作一次_Ios_Xcode_Swift_Autolayout_Ios8 - Fatal编程技术网

Ios addConstraint只工作一次

Ios addConstraint只工作一次,ios,xcode,swift,autolayout,ios8,Ios,Xcode,Swift,Autolayout,Ios8,我正在为iOS8制作一个自定义键盘,苹果开发者文档上说,在屏幕上绘制初始主视图后,您可以随时更改自定义键盘的高度。它说要做到这一点,应该使用.addConstant()方法 这里有一个链接: 我用的是斯威夫特。键盘的初始高度为215像素。我有一个向上滑动的手势,将高度增加到350像素。这和预期的一样。以及向下滑动,将高度更改为300像素 这一切都正常,但问题是它只工作一次。我向上滑动,高度增加,向下滑动,高度减少,但是如果我再次向上滑动,什么也不会发生。如果我再刷下去,什么也不会发生 所以,如

我正在为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”的成员。对不起,如果这是一个错误!扩展的日志可能不会显示在控制台中,您需要在窗口->设备中查看它。