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:如何调整视图及其所有子项的大小(在键盘弹出的情况下)?的主要内容,如果未能解决你的问题,请参考以下文章

Flex Canvas 子项随机调整大小

iPhone UIView - 调整框架以适应子视图

如何使用 xib + iPhone 中的 AutoSizing 属性

为不同的 iPhone 设备自动调整 CollectionView 单元的大小

如何使用 Xcode 8 上的自动布局调整对象的大小以适应不同的屏幕尺寸?

iPhone - 根据文本调整表格视图的大小