【问题标题】:Changing height of a custom inputView when device rotates设备旋转时更改自定义 inputView 的高度
【发布时间】:2012-07-13 06:16:11
【问题描述】:

我制作了一个自定义键盘视图并将其链接到 UITextField 的 inputView 属性。 有没有办法在方向改变时改变自定义 inputView 的高度,并像系统键盘一样平滑地改变框架? 我的键盘尺寸是 768x272,当设备横向时,尺寸变成 1024x272,但我想让它变得更大,比如 1024x372。如果我在得到 UIDeviceOrientationDidChangeNotification 时使用下面的代码更改框架,则更改动画不流畅。

textField.inputView.frame = CGRectMake(0,0,1024,372);

【问题讨论】:

  • 你试过把它放在动画块下面吗??
  • 我试着把它作为动画块放在 willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 但是结果一样,高度瞬间从小变高,然后动画开始使其短到宽。

标签: ios uitextfield uikeyboard inputview


【解决方案1】:

根据 Apple documentation 对于 UIResponder.inputView: “如果 UIKit 在其自动调整掩码中遇到具有 UIViewAutoresizingFlexibleHeight 值的输入视图,它会更改高度以匹配键盘。”

因此,如果您想要自定义高度,则不应指定 UIVieAutoresizingFlexibleHeight 掩码。

【讨论】:

    【解决方案2】:

    经过多次实验,我找到了自己问题的最佳答案。一个简短的答案是当您收到UIKeyboardDidHideNotification 时更改框架。

    自定义 inputView 嵌入到另一个由系统控制的名为UIPeripheralHostView 的视图中。 因此,在错误的时间更改自定义 inputView 不会立即反映或显示丑陋的布局。

    当设备旋转时,系统会短暂隐藏键盘,然后执行键盘从旧方向到新方向的旋转动画。我认为动画块插入在两个通知UIKeyboardDidHideNotificationUIKeyboardWillShowNotification 之间。这些通知与UIKeyboardWillChangeFrameNotification 结合在一起。这个通知中的“frame”其实就是UIPeripheralHostView的frame。

    因此,当我收到UIKeyboardDidHideNotification 时更改我的输入视图的框架使系统有机会在动画开始之前调整UIPeripheralHostView 的框架,从而在方向更改期间从短键盘平滑过渡到高键盘。

    这适用于 iOS 5。但 Apple 将来可能会改变这种做法。

    【讨论】:

    • 在 iOS 6 中,当您有自定义 inputView 时,您将不会收到 UIKeyboardWillShowNotification 等通知
    猜你喜欢
    • 2020-10-13
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多