如何强制UIView的layoutSubviews。
我有一个自定义的UIView有一个专门的,手动设置框架纵向和横向,因为autoresizingMasks只是不工作在我的情况。
我把这个框架设置在:
- (void)viewWillAppear:(BOOL)animated
它按预期工作。
现在我的问题是,我的UIView还有子视图,也有专门的肖像/风景的位置。
我将这些子视图定位在:
- (void)layoutSubviews
如果我现在离开我的viewController在纵向方向,旋转到另一个viewController横向,然后回到这个viewController我看到我的看法得到正确的resize,但我的视图,在layoutSubviews定位的子视图尚未重新定位,但在已经出现的观点之后,以animation的方式resize。
我什么都不做,我已经试过打电话了
- (void)layoutIfNeeded
以及:
- (void)setNeedsLayout
有鉴于此,似乎并没有改变什么。
任何想法我做错了什么?
谢谢。
今天有类似的问题。 我先打电话来解决这个问题
-
-setNeedsLayout
:设置视图需要布局的标志,然后调用 -
-layoutIfNeeded
:立即检查标志,因为它是之前手动设置的 – 作为结果layoutSubviews被调用。
不知道这是否是最好的方法,但它的工作原理;)
我会build议在viewDidLoad中设置初始框架,然后更改视图框架中的方向更改
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
在layoutSubviews中不需要任何显式animation(不知道是否有,但听起来像这样),因为任何帧更改都将同步到旋转animation。
在离屏时,方向仍然应该旋转,所以当再次在屏幕上转换时,应该正确定位视图。
我还build议观看WWDC 2010会议123“build立animation驱动用户界面”,其中详细介绍了这些内容。
在swift 3 @iOS 10.1上
override func viewWillAppear(animated: Bool){ //Doesn`t neeed to call super to work view.setNeedsLayout() }
运行完美
对我来说,工作是[self.view setNeedsDisplay]
。 这在整个视图上调用重绘。 你也可以通过在特定的视图上调用setNeedsDisplay
来重新绘制选定的视图,这在我的例子中是这样做的,它完美的工作。
- 在UIScrollView中,UIButton touch会延迟
- 在iOS上检测互联网连接最简单的方法?
- HTTP“Content-Disposition:附件”并在iOS Web浏览器上下载文件
- 快速刷回时,UITableViewCell不会被取消select
- Xcode .mobileprovision文件是否可以从命令行“安装”?
- 如何在Swift中插入新的单元格到UITableView中
- XCode4和核心数据:如何启用SQLdebugging
- 为什么在Xcode 6中出现错误“无法find或生成匹配的签名资产”?
- 使用正则expression式来查找/replaceNSString中的子string