2017-06-19 70 views
2

我试图在所有设备(iPhone 5 - 7 Plus)上都可见键盘时垂直居中放置一个标签。Swift:如何根据设备垂直居中视图/标签?

目前,标签只有垂直居中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加:

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

回答

2

更改此行

self.emptyStateMessageTopConstraint.constant = keyboardHeight - 145 

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

这工作完美!你能解释一下你是如何工作的? @Prakash – daanyyaal

+1

你的屏幕高度 - 键盘高度/ 2会给你键盘上方屏幕区域的中点,然后减去标签的一半高度将会给你从你必须放置标签的位置确切的y位置。 –

+0

啊,这很有道理! – daanyyaal

1

添加您的标签的约束(中心Y)到您的视图的中央,键盘上会出现改变你的底部约束你视图+ =键盘高度。视图中央的标签将在缩小键盘显示中的视图尺寸后停留在中间位置。注意视图没有高度约束,只有顶部和底部约束。

如果您在背景中没有任何视图来更改底部约束,您可以更改标签+ = keyboardHeight的centerConstraint。在键盘上显示更高一点。