类型'UIView'的值没有成员'constant'

问题描述 投票:1回答:2
@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初学者并学习此语言时出现此错误。

ios swift uiview
2个回答
0
投票

self.changePassView.constant = -1 * keyboardRect.height/2

您收到错误,是因为您试图访问constant中的一个名为self.changePassView的属性,该属性显然是UIView。看起来您正在尝试更改视图底部约束的值,但是布局约束是一个单独的对象,必须先获取该对象,然后才能设置其值。这可能会有所帮助:How to get constraint "bottomSpace" from UIView Programmatically?


0
投票

UIViews包含有关其自身外观和内容的信息。

NSLayoutConstraints通常添加到UIView,以修改它们在屏幕上的分布方式。

由于尝试访问constant中找不到的属性UIViews,因此收到错误。不过你近了。您需要一个NSLayoutConstraint.

第1步:设置约束

您可以以编程方式(read more here)或在故事板/笔尖的帮助下进行此操作。这是情节提要/笔尖方法的分步说明:

  1. 通过自动布局在情节提要或笔尖中添加约束。
  2. 在UIView类中创建NSLayoutConstraint变量。
  3. 回到情节提要中,找到您新创建的约束。它会显示在UIView旁边左侧的视图导航器中。
  4. 选择您要查找的约束,并导航到Xcode右侧面板的最右侧选项卡。
  5. 从右面板将“新参考出口”拖动到视图导航器中的UIViewController类。
  6. 如果正确完成,将显示新NSLayoutConstraint的选项。选择它。
  7. 现在代码中的变量引用了您在视觉上所做的约束。如果这些步骤令人困惑,并且您是个初学者(我不太清楚),请参考this thorough guide故事板。

第2步:放在一起

访问您的NSLayoutConstraintconstant值。完成上述所有步骤后,您的代码应如下所示:

// 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
© www.soinside.com 2019 - 2024. All rights reserved.