21

我在 iOS 7 中的 frame-property 有问题。我想在viewDidLoadmy 的 -method 中调整一些 UIViews 的大小UIViewController,但是如果我这样做,就像int screenHeight = [[UIScreen mainScreen] bounds].size.height; [self.leftSideTableView setFrame: CGRectMake(0, 0, 320, screenHeight)]; 我想要的那样设置高度,直到方法结束,但在其他所有方法和以前一样!

它有什么问题,或者它只是编译器的错误或其他什么?

4

4 回答 4

73

必须将视图调整大小放入-viewDidLayoutSubviews:(文档)

放置视图框架更改-viewWillAppear:-viewDidLoad:将不起作用,因为视图尚未布局!

于 2013-08-16T12:47:47.840 回答
11
  • 检查您是否autolayout在 xib 文件中使用。如果您不想使用autolayout,请在您的 xib 文件中取消选中它。

  • 改变你的self.leftSideTableView框架-viewWillAppear:

于 2013-08-16T01:30:37.327 回答
8

检查以确保您的故事板文件中未激活自动布局。

要关闭它,请查看界面生成器中的检查器。单击左侧看起来像页面的图标。在“界面生成器文档”部分中,取消选中“使用自动布局”。

我发现最好在 IB 中使用自动布局的整个视图控制器,或者完全在代码中。将两者混合会导致难以调试的奇怪行为。

于 2014-04-02T20:16:50.313 回答
1

发生这种情况有几个原因。首先,您需要确保您的 tableview 不是 nil。如果您以编程方式创建它,则需要确保在尝试设置框架之前在某处调用 alloc/init。如果self.leftSideTableView是 IBOutlet,这可能是由于忘记将出口实际链接到接口对象而导致的。

然后,第二次也是不太可能,您正在以编程方式创建表视图并正确初始化它,但您忘记将其添加为您的屏幕视图之一的子视图。

于 2013-08-15T23:28:08.297 回答