【问题标题】:iOS11 not taking constraints correctlyiOS11 没有正确接受约束
【发布时间】:2017-09-28 08:33:32
【问题描述】:

我在商店里有一个应用程序,为了支持所有设备和键盘,我正在根据键盘高度更改底部约束高度。它适用于除 iOS11 之外的所有 iOS 版本。该按钮没有改变它的位置,如下图所示。

谢谢!

这是 iOS10 预览版

这是 iOS11 预览版

代码

    func keyboardWillShow(notification: NSNotification) {
    if !keyboardIsHidden{
        return;
    }
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        keyboardIsHidden = false
        nextButtonBottmConstraint.constant = nextButtonBottmConstraint.constant + keyboardSize.height
    }
}

【问题讨论】:

  • 向我们展示与约束更改相关的代码。
  • 代码已添加!
  • @KingT。我在 iOS 11 中也面临着类似的问题,约束仍在寻找解决方案..
  • @Nagarjun 检查我的答案。
  • @RajeshkumarR 问题与键盘无关,某些约束在 iOS 11 中不起作用。

标签: ios autolayout constraints nslayoutconstraint ios11


【解决方案1】:

如果您使用UIKeyboardWillShowNotification 获取键盘高度,则将UIKeyboardFrameBeginUserInfoKey 更改为UIKeyboardFrameEndUserInfoKey

UIKeyboardFrameBeginUserInfoKey 为键盘矩形高度返回 0 iOS 11 中的值。将其更改为 UIKeyboardFrameEndUserInfoKey 可能 解决这个问题。

Objective-C

- (void)keyboardWasShown:(NSNotification*)aNotification {
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    //Change constraints
}

斯威夫特 3

func keyboardWasShown(_ aNotification: Notification) {
    let info = aNotification.userInfo
    let kbSize: CGSize? = info?[UIKeyboardFrameEndUserInfoKey]?.cgRectValue?.size
    //Change constraints
}

【讨论】:

  • 我的问题与键盘无关,因为该代码适用于除 iOS 11 之外的所有 iOS 版本
  • UIKeyboardFrameBeginUserInfoKey 在 iOS 11 中为键盘 rect 值返回 0。针对类似问题将其更改为 UIKeyboardFrameEndUserInfoKey 并且有效。
  • @KingT。正如 thm14 所说,UIKeyboardFrameBeginUserInfoKey 在 iOS 11 中为键盘 rect 值返回 0。所以 keyboardSize.height 等于 0。用 UIKeyboardFrameEndUserInfoKey 更改 UIKeyboardFrameBeginUserInfoKey 将解决您的问题。试试看
  • @RajeshkumarR 我会在一段时间内尝试并告诉提供反馈
【解决方案2】:

斯威夫特

使用 IHKeyboardAvoiding

步骤 1) pod 'IHKeyboardAvoiding'

步骤 2) 复制以下代码

 import IHKeyboardAvoiding

  override func viewDidAppear(_ animated: Bool) {
    KeyboardAvoiding.avoidingView = Your_View
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多