iOS:setFrame不再从viewDidLoad工作,或VIEWWILL出现
我更喜欢禁用iOS:setFrame不再从viewDidLoad工作,或VIEWWILL出现,ios,ios6,Ios,Ios6,我更喜欢禁用autoresizesSubviews,并使用setFrame放置我的所有子视图。 从iOS 6开始,情况似乎发生了很大变化。 在viewDidLoad中对视图调用setFrame时,没有任何效果。我从视图中尝试了它将出现;同样的事情 setFrame调用将在WillAnimateRotationInterfaceOrientation中工作,但最初不像在iOS 5中那样调用 有人能澄清一下我应该从哪里布置视图吗?我想你应该从UIViewController布置视图。您是否尝试过在以
autoresizesSubviews
,并使用setFrame
放置我的所有子视图。
从iOS 6开始,情况似乎发生了很大变化。
在viewDidLoad
中对视图调用setFrame时,没有任何效果。我从视图中尝试了它将出现;同样的事情
setFrame调用将在WillAnimateRotationInterfaceOrientation中工作,但最初不像在iOS 5中那样调用
有人能澄清一下我应该从哪里布置视图吗?我想你应该从UIViewController布置视图。您是否尝试过在以下位置执行布局任务:
根据苹果的文件:
视图控制器可以重写此方法,以便在视图布局其子视图后进行更改
由于视图本身不布局其子视图(不使用autosize、autolayout或LayoutSubView:),因此可以使用此方法执行布局任务
然而,优雅的方法是使用自定义父UIView并在那里执行所有布局,覆盖UIView的布局子视图:
(除非您以友好方式添加/删除视图)。引用苹果公司关于以下内容的文档:
理想情况下,视图本身执行重新定位所需的所有工作,而无需视图控制器参与该过程。但是,如果视图控制器动态添加和删除视图,则可能无法在Interface Builder中进行静态布局。在这种情况下,视图控制器是控制过程的好地方,因为视图本身通常只有场景中其他视图的有限图片
关于“要求视图展示自己对我来说没有意义。视图没有权力说它们应该去哪里。这是控制器的角色,不是吗?”。我认为答案往往是否定的。它是父视图(而不是视图控制器),通常起到布置自己的子视图的作用。它通过使用autoresizingMask或autolayout(仅限iOS 6)来实现。或者,您可以通过重写父视图的-layoutSubviews
方法以编程方式进行布局
当然,正如前面提到的,控制器也可以通过覆盖-(void)viewdilayoutsubviews
来参与布局过程。当我不想为保持简单而对视图控制器的顶层视图进行子类化时,我经常使用这种方法
最后,我发现这个超级有用。即使有一些小错误,这篇文章也提供了视图布局过程的大图 如果取消选中Interface Builder中的“自动布局”选项,则可以在viewDidLoad
中使用setFrame
。如果需要使用自动布局,则需要在viewdilayoutsubview:
中执行布局任务
要求视图进行布局对我来说没有意义。观点没有权力说他们应该去哪里。这就是控制器的角色,不是吗?UIViewController有一个视图属性,它指向一个视图:视图控制器的内容视图。此单一视图负责显示与控制器相关的所有内容。理论上,此单一视图知道其所有子视图及其布局。请思考为什么视图控制器有一个名为“viewDidLayoutSubviews”的方法。因为子视图的布局应由(内容)视图负责。的确,也可以从控制器中布局子视图,这不一定是一种坏的做法。我一直发现苹果的想法,自动调整大小应该被用于某种脑死亡。他们没有读过关于用户界面设计的书吗?自动调整视图大小的机制永远不会产生理想的子视图布局。布局必须由设计UI的人员完成。自动方法与良好的设计背道而驰,我很惊讶以前由史蒂夫·乔布斯经营的公司会提倡这种方法。也许,如果您的唯一子视图是一个表,那么自动布局是合适的。但是,如果你有各种各样的子视图,那么自动化布局就没有意义了。我同意你的观点,尽管iOS6引入的新的自动布局功能比自动调整大小有用得多(当然,与以前的iOS版本不向后兼容)。不管怎样,我们在这里讨论的是如何从代码中进行布局。。。如果我的回答有帮助(你后来删除的第一条评论说viewDidLayoutSubview适合你),那么请接受答案;我在从情节提要加载视图时遇到问题,在视图中重新定位某些内容似乎不起作用。将setFrame移动到viewDidLayoutSubviews是可行的。你也禁用了自动布局吗?哇,没注意到。谢谢你的提醒,现在我正在做我所有的早期布局。
- (void)viewDidLayoutSubviews