自定义键盘:inputView:如何更改键盘大小?

时间:2011-05-18 08:46:41

标签: textfield uikeyboard inputview

我使用带有“setInputView”功能的自定义键盘实现了文本字段。 但我有一个问题:我的键盘框架不是标准的iphone键盘框架。

问题是: 如何更改自定义键盘的大小? 我知道一些函数,如:UIKeyboardFrameBeginUserInfoKey,.. iec。

请注意: iPhone键盘框架= 0,264,320,216 我的自定义键盘框架是= 0,0,320,460

希望你的合作, 最好的祝福... P

5 个答案:

答案 0 :(得分:26)

事实证明,您分配给UITextField属性的自定义输入视图的默认行为是将视图的大小调整为与默认键盘相同的帧。尝试设置(我使用名称InputViewController作为我的输入视图,但你可以使用你想要的任何东西):

inputViewController = [[InputViewController alloc] initWithNibName:@"InputViewController" bundle:nil];
inputViewController.delegate = self;
inputViewController.view.autoresizingMask = UIViewAutoresizingNone; // This is the code that will make sure the view does not get resized to the keyboards frame.

有关详细信息,请查看 Apple 提供的this link。:

  

如果UIKit在其自动调整遮罩中遇到带有UIViewAutoresizingFlexibleHeight值的输入视图,它会更改高度以匹配键盘。

希望有帮助!

答案 1 :(得分:9)

要设置与原生键盘大小相同的键盘inputView,请执行以下操作:

inputView.autoresizingMask = UIViewAutoresizingFlexibleHeight;

要设置自己的框架,请执行以下操作:

inputView.autoresizingMask = UIViewAutoresizingNone;

From Apple

  

您可以灵活地定义输入视图或输入附件视图的大小和内容。虽然这些视图的高度可以是您想要的,但它们应该与系统键盘的宽度相同。如果UIKit在其自动调整掩码中遇到具有UIViewAutoresizingFlexibleHeight值的输入视图,则会更改高度以匹配键盘。输入视图和输入附件视图可能具有的子视图(例如控件)的数量没有限制。有关输入视图和输入附件视图的更多指导,请参阅iOS人机界面指南。

答案 2 :(得分:1)

我遇到了同样的问题。我通过注册UIKeyboardDidShowNotification解决了它(不幸的是UIKeyboardWillShowNotification不起作用),然后在键盘显示后更改视图大小。但是,当它向上移动时,它仍然在键盘顶部有白色框。这对我来说很好,因为它是通过带有白色背景的UITextView进入的。但是,如果你进入任何其他彩色物体,在视图调整大小之前它看起来会有点难看。您可以通过将背景颜色设置为clearColor来解决此问题。

// Add this while initializing your view
self.backgroundColor = [UIColor clearColor]; // Needed because we can't resize BEFORE showing the view.  Otherwise you will see an ugly white box moving up w/ the keyboard
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWasShown:)
                                             name:UIKeyboardDidShowNotification object:nil];



// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{

    CGRect rect = self.frame;
    rect.size.height = 164;
    self.frame = rect;

}

答案 3 :(得分:1)

此外,如果您正在使用UIViewController来设计您的inputView,请不要使用UIViewController.view ...无论AutoresizeMask如何,在旋转时调整大小都会出现很多问题。

对我有用的是获取我现有的用户界面并使用编辑器>嵌入>视图。然后创建一个新的插座,并将该插座作为inputView传递。突然,旋转错误的大小消失了。

答案 4 :(得分:0)

对我而言,msgambel的解决方案无效。但方法是正确的,我正在使用inputView的 autoresizingMask 。以前我有不同的设置,但在自定义键盘上避免白色额外空间的正确方法是:

enter image description here

我仅将此应用于最外层视图。

enter image description here