mye*_*l0w 50 iphone uiviewcontroller uiview ios layoutsubviews
我有一个自定义的UIView,它有一个专用的,手动设置的纵向和横向框架,因为autoresizingMasks在我的情况下不起作用.
我将此框架设置为:
- (void)viewWillAppear:(BOOL)animated
Run Code Online (Sandbox Code Playgroud)
它按预期工作.
我现在的问题是,我的UIView还有子视图,也有专门的肖像/风景位置.
我将这些子视图放在:
- (void)layoutSubviews
Run Code Online (Sandbox Code Playgroud)
如果我现在离开我在的viewController 如纵向,旋转到另一个的viewController横向的,然后回来这个的viewController我看到我的观点得到了正确的调整,但我的观点的子视图,其中获得定位在layoutSubviews不重新定位还没有,但在视图已经出现后以动画方式调整大小.
我在viewDidAppear中什么也没做,我已经尝试过调用了
- (void)layoutIfNeeded
Run Code Online (Sandbox Code Playgroud)
以及:
- (void)setNeedsLayout
Run Code Online (Sandbox Code Playgroud)
在viewWillAppear中,但它似乎没有任何改变.
我有什么想法我做错了吗?
谢谢.
小智 93
今天有类似的问题.我先打电话解决了
-setNeedsLayout:设置视图需要布局的标志,然后调用-layoutIfNeeded:立即检查标志,并且 - 之前手动设置 - 作为结果调用layoutSubviews.不知道这是不是最好的方法,但它有效;)
我建议在viewDidLoad中设置初始帧,然后更改视图帧以进行方向更改
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
Run Code Online (Sandbox Code Playgroud)
你不需要layoutSubviews中的任何显式动画(不确定你是否有任何动画,但听起来像它),因为任何帧更改都将同步到旋转动画.
在屏幕外时,仍应旋转方向,以便在再次向后切换到屏幕上时,应正确定位视图.
我还建议观看WWDC 2010 Session 123"构建动画驱动的UI",它更详细地介绍了这些内容.
小智 5
在 swift 3 @iOS 10.1
override func viewWillAppear(animated: Bool){
super.viewWillAppear(animated)
view.setNeedsLayout()
}
Run Code Online (Sandbox Code Playgroud)
运行完美