@objc func handleKeyboardDidShow (notification: NSNotification)
{
let keyboardRectAsObject = notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! NSValue
var keyboardRect = CGRect.zero
keyboardRectAsObject.getValue(&keyboardRect)
self.changePassView.constant = -1 * keyboardRect.height/2
UIView.animate(withDuration: 0.5,animations: {
self.view.layoutIfNeeded()
})
}
有人可以帮我吗?为什么我是iOS初学者并学习此语言时出现此错误。
self.changePassView.constant = -1 * keyboardRect.height/2
您收到错误,是因为您试图访问constant
中的一个名为self.changePassView
的属性,该属性显然是UIView
。看起来您正在尝试更改视图底部约束的值,但是布局约束是一个单独的对象,必须先获取该对象,然后才能设置其值。这可能会有所帮助:How to get constraint "bottomSpace" from UIView Programmatically?
UIViews
包含有关其自身外观和内容的信息。
NSLayoutConstraints
通常添加到UIView,以修改它们在屏幕上的分布方式。
由于尝试访问constant
中找不到的属性UIViews
,因此收到错误。不过你近了。您需要一个NSLayoutConstraint.
第1步:设置约束
您可以以编程方式(read more here)或在故事板/笔尖的帮助下进行此操作。这是情节提要/笔尖方法的分步说明:
NSLayoutConstraint
变量。UIView
旁边左侧的视图导航器中。UIViewController
类。NSLayoutConstraint
的选项。选择它。 现在代码中的变量引用了您在视觉上所做的约束。如果这些步骤令人困惑,并且您是个初学者(我不太清楚),请参考this thorough guide故事板。
第2步:放在一起
访问您的NSLayoutConstraint
的constant
值。完成上述所有步骤后,您的代码应如下所示:
// In your class's definitions.
// This is what you'll have to link programmatically or in your storyboard/nib
@IBOutlet var changePassViewBottomConstraint: NSLayoutConstraint!
// Later on in your function:
self.changePassViewBottomConstraint.constant = -1 * keyboardRect.height/2