Swift:如何根据设备垂直居中视图/标签?

时间:2017-06-19 13:01:34

标签: ios iphone swift

当所有设备(iPhone 5 - 7 Plus)都可以看到键盘时,我正试图垂直居中标签。

目前,该标签仅垂直居中于iPhone 5屏幕,但这只是因为我使用以下代码手动设置:

    func keyboardWillShow(_ notification:Notification) {

    let userInfo:NSDictionary = (notification as NSNotification).userInfo! as NSDictionary
    let keyboardFrame:NSValue = userInfo.value(forKey: UIKeyboardFrameEndUserInfoKey) as! NSValue
    let keyboardRectangle = keyboardFrame.cgRectValue
    let keyboardHeight = keyboardRectangle.height

    UIView.animate(withDuration: 0.3) {
        self.emptyStateMessageTopConstraint.constant = keyboardHeight - 145
        self.updateViewConstraints()
        self.emptyDataInfoView.layoutIfNeeded()
    }

我的猜测是在键盘可见时根据设备找到UIView的大小,调整自动布局约束。

我不知道这是否正确,但我正在努力寻找方法。

使用上述功能执行以下操作:

iPhone 5 / SE:

下面的图片,您可以看到描述居中。 enter image description here

iPhone 7 Plus:

下图中,您可以看到描述不居中。  enter image description here

2 个答案:

答案 0 :(得分:2)

将此行更改为

self.emptyStateMessageTopConstraint.constant = keyboardHeight - 145

self.emptyStateMessageTopConstraint.constant = (self.view.frame.size.height - keyboardHeight)/2 - yourlabelheight/2

答案 1 :(得分:1)

将标签的约束(中心y)添加到视图的中心,键盘上将显示更改视图的底部约束+ =键盘高度。在键盘显示的视图尺寸减小后,视图中心的标签将重新布局,以保持在中心位置。请注意,视图没有高度约束,只有顶部和底部约束。

OR 如果您在后台没有任何视图来更改底部约束,则可以更改标签的centerConstraint + = keyboardHeight。键盘秀要高一点。