旋转自定义inputView为UITextView的问题

我已经写了一个自定义的input视图,用于replaceUITextView的标准键盘。 如果我将我的自定义UIView作为我的UITextViewinputView ,它将在纵向和横向模式下按预期工作。

当我旋转设备时发生问题 – 每当我这样做,我的自定义UIView扩展到填满整个屏幕,而不是只是遮住了键盘。 我没有任何自定义resize的代码 – 我从字面上只是将UIView分配为UITextView的inputView属性,然后旋转设备。

当我旋转设备时,如何让自定义键盘视图占用普通键盘占用的空间?

从Apple文档:

您可以灵活地定义input视图或input附件视图的大小和内容。 虽然这些视图的高度可以是你想要的,但它们应该与系统键盘的宽度相同。 如果UIKit在其自动识别掩码中遇到一个UIViewAutoresizingFlexibleHeight值的input视图,它将改变高度以匹配键盘。

http://developer.apple.com/library/ios/#Documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/InputViews/InputViews.html#//apple_ref/doc/uid/TP40009542-CH12-SW1

我有这个问题。 解决这个问题的方法是:

  1. 打开键盘的viewcontroller .m文件

  2. find- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation方法

  3. 让它返回NO。

我的猜测是该视图正在做一个双重旋转。

如果我记得, UIViewAutoresizingNone默认是UIViewAutoresizingNone 。 你autoresizingMask应该是UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin

使你的inputViews autoresizingMask = UIViewAutoresizingNone; 使用不同值的autoresizingMask(版本特定)将有所帮助。

这里有一些细节,我花了一些时间回来的iPad(可能这会帮助你):

  1. 如果input视图是拾取器视图,默认情况下会发生自动调整,这意味着帧被设置为所需的矩形。 在iPad的不同目标/版本中,这种做法存在一些差异:
    1. autoresizemask至less应该在所有目标中自动autoresizeflexiblewidth
    2. 如果在autoresizeflexibleheight中未启用autoresizeflexibleheight,则将Rect设置为default(initial)高度
    3. 如果在autoresizeflexibleheight中设置autoresizeflexibleheight,则将Rect设置为不正确的坐标(x,y)。不要使用autoresizeflexibleheight掩码作为选取器视图。
  2. 如果inputview不是select器视图,则应closures其用于flexibleheight autoresizemasks