0

我正在使用 xcode 4.5(以防有任何区别)和 Storyboard,我正在尝试做一些看似非常简单但没有任何运气的事情。在我的故事板视图中,我放置了一个 UIView 组件,正如您在此处的图片中看到的那样http://www.shopow.co.uk/assets/storyboard-view.png其中绿色部分是高度为 100 的 UIView

在 viewDidLoad 方法中,我添加了以下代码

NSLog(@"View Height: %f", self.testView.bounds.size.height);

CGRect viewFrame = self.testView.frame;
CGSize newSize = CGSizeMake(viewFrame.size.width, 300);
viewFrame.size = newSize;
self.testView.frame = viewFrame;

NSLog(@"View Height: %f", self.testView.bounds.size.height);

从我读到的关于调整大小的内容中,我假设绿色部分的大小调整为 300 高,但是尽管日志窗口中的输出显示以下内容,但这并没有发生

2012-10-19 13:05:28.015 TableTest[54318:c07] View Height: 460.000000
2012-10-19 13:05:28.016 TableTest[54318:c07] View Height: 300.000000

注意初始高度是 460 而不是 100,这可能意味着什么!

iOS 模拟器显示了这个http://www.shopow.co.uk/assets/simulator-view.png

据我所知,我必须忽略一些明显的事情,这没有按预期工作。任何指导将不胜感激。

4

3 回答 3

0

我不确定它是否能解决你的问题,但你真的应该调整你的视图大小viewWillAppear而不是viewDidLoad.

viewDidLoad字面意思是它所说的“视图已加载”。但是,此时您的 nib 可能没有按照您的预期设置视图。

作为测试,请尝试在两者中记录以下viewDidLoad内容viewWillAppear

NSLog(@"frame: %@", NSStringFromCGRect(self.view.frame));

您应该看到,在这两种方法中,您都会得到不同的结果。该viewWillAppear方法更可能是正确的,因为视图已设置好并准备好呈现。

我个人并没有那么多地使用 Interface Builder,因为它会导致比我能处理的更令人头疼的问题,但也许您设置了自动调整大小的蒙版或弹性约束,这会影响您的视图尺寸?

于 2012-10-19T12:39:47.433 回答
0

就像@CaptainRedmuff 说的那样,你用错误的方法调用它。viewDidLoad在加载视图后调用,这意味着已经设置了框架。您正在寻找的方法是loadView, asviewWillAppear:animatedviewDidAppear:animatedare 被调用 after viewDidLoad

于 2012-10-19T12:43:07.607 回答
0

OP并不清楚他是如何解决的。以防其他人遇到此问题。

如果您的视图显示的布局与您在情节提要中看到的布局相同,尽管您正在以某种方式以编程方式调整/更改其属性,这是因为自动布局正在造成严重破坏。

只需选择要以编程方式更改的视图,然后转到“属性”窗格中的“文件检查器”。取消选中使用自动布局旁边的复选框。再次运行,你会看到你的问题神奇地消失了。

于 2015-08-27T13:49:18.340 回答