iOS - 为什么启用自动布局使用代码重新调整大小和重新定位视图将不起作用?

时间:2014-10-28 03:27:26

标签: ios layout autolayout xib

我有一个xib,其内容是这样的:

enter image description here

橙色视图是 view_b ,这是UIView,其中包含UITextField,而UITableView < EM> tblv_a 即可。 view_content 是包含两个视图的UIView。

我想要完成的是调整 view_content 及其子视图&#39;键盘显示时的大小,即用户在UITextField中编辑时的大小。我尝试使用keyboardDidShow:中的以下代码执行此操作:

NSDictionary* info = [notification userInfo];
CGRect kbRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];

CGRect convertContentRect = [self.view convertRect:CGRectFromString(str_contentViewRect) toView:self.view];
CGRect coverRect = CGRectIntersection(kbRect, convertContentRect);

self.view_content.frame = CGRectMake(CGRectFromString(str_contentViewRect).origin.x, CGRectFromString(str_contentViewRect).origin.y, CGRectFromString(str_contentViewRect).size.width, CGRectFromString(str_contentViewRect).size.height - coverRect.size.height);

self.tblv_a.height = self.view_content.height - self.view_b.height;
self.view_b.y = self.tblv_a.y_height;

然而,当我使用模拟器尝试结果时,它没有按预期工作,相反,它给出了以下结果:

enter image description here

在试图找出错误之后,我尝试在界面构建器中禁用自动布局,然后按预期工作,即:

enter image description here

我没有对视图设置任何限制,我检查了视图的框架,看起来是正确的。所以我想autolayout是问题的根源,但我不知道为什么会这样,有人可以帮忙吗?

如果我想启用autolayout来处理不同的屏幕尺寸,我应该如何解决这个问题?

谢谢!

view_content &#39;背景颜色为浅灰色,而 tblv_a 为浅色)

1 个答案:

答案 0 :(得分:0)

如果启用了自动布局,那么如果您不添加自己的布局,系统将添加默认约束。当约束到位时,您不应设置任何帧。如果需要移动视图或调整视图大小,则需要通过更改约束来实现。