iphone:如何调整视图及其所有子项的大小(在键盘弹出的情况下)?
Posted
技术标签:
【中文标题】iphone:如何调整视图及其所有子项的大小(在键盘弹出的情况下)?【英文标题】:iphone: How to resize a view and all of its children (in context of keyboard popping up)? 【发布时间】:2011-11-23 01:39:47 【问题描述】:我有一个 iPhone 应用程序。该视图由两个子视图组成:一个 400 像素高的 tableview 和一个位于视图底部的大约 80 像素高的 uitextview。
当键盘可见时,我试图向上移动 textview 和 tableview。我调整了“主”视图的大小以使其更小。为什么它的孩子似乎也没有调整大小? 我是否需要重新调整 tableview 的框架,并重新调整 textview 的框架?我只是想知道预期的行为是什么。我需要使用 setNeedsLayout() 还是 setNeedsDisplay?
我预计通过缩小“主”视图的大小,其子视图也会“缩小”并受到其父视图的约束。看起来 textview 仍然在屏幕底部。 tableview 似乎是正确的(它缩小了),但 textview 看起来并没有移动。虽然在新的缩小视图中现在有一个白色区域,文本视图 应该 移动到该区域。
// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
NSLog(@"keyboard was shown");
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
//CGRect keyboardFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue];
NSLog(@"kb size is:%f",kbSize.height);
//UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
CGRect newFrame = self.view.frame;
//20 status bar height, 44 is nav bar height
newFrame.size.height = 480 -20 - 44 - kbSize.height;
self.view.frame = newFrame;
self.view.layer.borderWidth = 1.0f;
self.view.layer.borderColor = [[UIColor redColor] CGColor];
[self.view setNeedsLayout];
[self.view setNeedsDisplay];
【问题讨论】:
【参考方案1】:尝试使用 UIScrollView。 将此控件放在滚动视图中并使用属性 contentOffset 向上/向下滚动。 这是非常简单的方法。
祝你好运!
【讨论】:
【参考方案2】:为你的内容使用 UIScrollView。
收到通知后,用键盘高度扩展滚动视图的内容大小。 然后设置内容偏移量。
【讨论】:
以上是关于iphone:如何调整视图及其所有子项的大小(在键盘弹出的情况下)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 xib + iPhone 中的 AutoSizing 属性
为不同的 iPhone 设备自动调整 CollectionView 单元的大小