旋转设备时,将自定义视图固定在键盘顶部

时间:2015-09-13 13:15:24

标签: ios objective-c ipad ios-simulator

我的应用仅限iPad,根视图嵌入导航控制器,导航控制器有两个子视图:

1)UITextView(不是UITextField)覆盖除导航栏以外的整个区域。

2)另一个UIView作为工具栏。它涵盖了UITextView,最初停留在根视图的底部。

enter image description here

现在我可以制作"工具栏"与虚拟键盘同步上下移动。

但是有一个问题:如果我在键盘显示时旋转设备,那么"工具栏"不再粘在虚拟键盘的顶部,而是在旋转时停留在屏幕的中间并向下倾斜以便在旋转后与键盘相遇,这非常难看。

enter image description here

目前我通过动态添加和删除约束来使工具栏视图上下移动,我不确定这是否是一个问题因为我只是使用模拟器进行测试。

有人能给我一些建议吗?

底部应用程序中带有工具栏的 UITextView示例可能是 Document ProPages

2 个答案:

答案 0 :(得分:3)

我建议使用UITextView的{​​{3}}属性。

UIToolbar* toolbar = [[UIToolbar alloc] init];
toolbar.barStyle = UIBarStyleDefault;
toolbar.items = [NSArray arrayWithObjects:
                       [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil],
                       [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil action:nil],
                       [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:nil],
                       [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:nil],
                       nil];
[toolbar sizeToFit];
self.textfiled.inputAccessoryView = toolbar;

只需使用上面的内容,您就可以在键盘顶部放置一个工具栏,旋转时它会有一个漂亮而流畅的动画。我没有看过你引用的其他应用,但我相信这是他们在inputAccessoryView中使用的内容。

答案 1 :(得分:0)

作为替代方案,您可以手动布局工具栏而不应用约束。为此,你可以:

添加处理键盘出现的方法。

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    self.keyboardHeight = MIN(kbSize.height, kbSize.width);
    [self layoutElements];
}

在此方法中,您需要计算当前键盘高度。

layoutElements

旋转设备时也会调用此方法。

然后在您的自定义[[UIScreen mainScreen] bounds].size方法中,使用预先计算的键盘高度来定位工具栏。

您可以使用根视图或屏幕尺寸(width)的大小,但请注意,在iOS7和iOS8 +中,heightlayoutElements有不同的值,具体取决于方向

要确保调用自定义布局方法(viewWillLayoutSubviews),您还可以将其放在- (void) viewWillLayoutSubviews { [super viewWillLayoutSubviews]; [self layoutElements]; } 方法中。

{{1}}