layoutSubViews (二)

转载 2016年08月29日 23:49:07

在UIView里面有一个方法layoutSubviews,这个方法具体作用是什么呢? 

- (void)layoutSubviews; // override point. called by layoutIfNeeded automatically. As of iOS 6.0, when constraints-based layout is used the base implementation applies the constraints-based layout, otherwise it does nothing. 

官方文档解释 

我们先来看看苹果官方文档的解释: 

The default implementation of this method does nothing on iOS 5.1 and earlier. Otherwise, the default implementation uses any constraints you have set to determine the size and position of any subviews.

Subclasses can override this method as needed to perform more precise layout of their subviews. You should override this method only if the autoresizing and constraint-based behaviors of the subviews do not offer the behavior you want. You can use your implementation to set the frame rectangles of your subviews directly.

You should not call this method directly. If you want to force a layout update, call the setNeedsLayout method instead to do so prior to the next drawing update. If you want to update the layout of your views immediately, call the layoutIfNeeded method. 

最后一段说,不要直接调用此方法。如果你想强制更新布局,你可以调用setNeedsLayout方法;如果你想立即数显你的views,你需要调用layoutIfNeeded方法。 

layoutSubviews作用 

layoutSubviews是对subviews重新布局。比如,我们想更新子视图的位置的时候,可以通过调用layoutSubviews方法,既可以实现对子视图重新布局。 

layoutSubviews默认是不做任何事情的,用到的时候,需要在自雷进行重写。 

layoutSubviews以下情况会被调用 

苹果官方文档已经强调,不能直接调用layoutSubviews对子视图进行重新布局。那么,layoutSubviews什么情况下会被调用呢?通过百度搜索,发现以下几种情况layoutSubviews会被调用。 

  1. 直接调用setLayoutSubviews。(这个在上面苹果官方文档里有说明) 
  2. addSubview的时候。 
  3. 当view的frame发生改变的时候。 
  4. 滑动UIScrollView的时候。 
  5. 旋转Screen会触发父UIView上的layoutSubviews事件。 
  6. 改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。 

我简单测试了一下,上面基本都会被调用。 注意: 

当view的fram的值为0的时候,`addSubview`也不会调用`layoutSubviews`的。

layoutSubviews方法在对自雷视图进行布局的时候非常方便。可以自己动手,深入理解layoutSubviews的调用机制。

关于layoutSubviews的一点使用总结

1、layoutSubviews 被调用的触发条件 (1)采用 initWithFrame:方法初始化,并且frame不为 CGRectZero是会触发 (2)当 addSubView的时候会触发...
  • reylen
  • reylen
  • 2015年08月13日 10:28
  • 1767

layoutSubViews调用时机(转载的基础上添加一些自己的总结)

(1)什么时候调用layoutSubViews 1、addSubview,view和它的子view的layoutSubView都会被调用。 2、调用setNeedsLayout 调用自己的la...
  • u013283787
  • u013283787
  • 2015年08月11日 10:32
  • 673

iOS学习笔记之layoutSubviews相关

一、 与之相关的方法 - (void)layoutSubviews - (void)layoutIfNeeded - (void)setNeedsLayout 1.layo...
  • wen1062916470
  • wen1062916470
  • 2015年12月31日 15:45
  • 752

"Auto Layout still required after executing -layoutSubviews” iOS7上崩溃sdk缺陷

在iOS7系统上,我项目工程里写了一个CinemaMemberView,添加到一个viewController中,结果崩溃了。iOS8和iOS6上则不会崩溃。 Terminating app due ...
  • hherima
  • hherima
  • 2015年08月07日 18:32
  • 3872

iOS layoutSubviews等方法用法,view加载用法

//    1、在UIController添加View 方法     PictureScrollView *pictureView = [PictureScrollView showPictu...
  • sevenquan
  • sevenquan
  • 2016年04月05日 17:23
  • 1897

iOS UIView layoutSubviews调用时机

iOS 官方文章中对UIView的layoutSubviews 介绍如下: The default implementation of this method does nothing on...
  • lwjok2007
  • lwjok2007
  • 2015年09月18日 10:47
  • 1967

layoutSubviews 如何手动调用 ViewWillLayoutSubView

http://www.07net01.com/program/2015/12/1017687.html iOS autolayout机制相关方法 - (CGSize)sizeThatF...
  • jeffasd
  • jeffasd
  • 2016年05月05日 12:04
  • 2599

layoutSubviews方法的调用

今天在使用自定义UITableViewCell时发生一个问题,我在代理方法中重新改变了UITableViewCell的高度,代码如下:-(CGFloat)tableView:(UITableView ...
  • weichuang_1
  • weichuang_1
  • 2015年09月09日 23:54
  • 463

重写layoutSubviews

init does not cause layoutSubviews to be called (duh) addSubview causes layoutSubviews to be called...
  • songzhuo1991
  • songzhuo1991
  • 2015年09月26日 14:33
  • 337

iOS UIView 的 layoutSubviews 方法

原文地址:http://bachiscoding.com/blog/2014/12/15/when-will-layoutsubviews-be-invoked/ UIKit 的 UIView ...
  • jijiji000111
  • jijiji000111
  • 2016年06月14日 14:18
  • 296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:layoutSubViews (二)
举报原因:
原因补充:

(最多只允许输入30个字)