设置UIView的框架不起作用

我有iOS 7中的框架属性的问题。我想调整我的UIViewControllerviewDidLoad – 方法中的一些int screenHeight = [[UIScreen mainScreen] bounds].size.height; [self.leftSideTableView setFrame: CGRectMake(0, 0, 320, screenHeight)]; ,但如果我这样做int screenHeight = [[UIScreen mainScreen] bounds].size.height; [self.leftSideTableView setFrame: CGRectMake(0, 0, 320, screenHeight)]; int screenHeight = [[UIScreen mainScreen] bounds].size.height; [self.leftSideTableView setFrame: CGRectMake(0, 0, 320, screenHeight)]; 高度被设置为我想要的,直到方法结束,但是在其他所有的方法中,它就像以前一样!

它有什么问题,或只是编译器或其他任何东西的错误?

一个必须把视图resize到-viewDidLayoutSubviews: (文档)

将视图框架更改放置到-viewWillAppear:-viewDidLoad:将不起作用,因为视图还没有布局!

  • 检查你是否在你的xib文件中使用autolayout布局。 如果您不想使用自动autolayout ,请取消选中您的xib文件。

  • -viewWillAppear:更改self.leftSideTableView框架。

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

要closures它,请查看界面构build器中的检查器。 点击左侧的图标,看起来像一个页面。 在“接口生成器文档”部分中,取消选中“使用自动布局”。

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

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

然后,第二,不太可能的是,你正在编程创build表视图,并正确初始化,但你忘了添加它作为你的一个屏幕视图的子视图。