zoukankan      html  css  js  c++  java
  • layout用法

    It’s important to optimize any UIView layoutSubviews method you create, as it can be frequently called, and has the potential for creating recursion (triggering a setNeedsLayout from layoutSubviews can create a loop that will grossly affect your apps performance). Layout subviews is called once per run loop on any view that has had setNeedsLayout or setNeedsDisplayWithRect: called on it. So in addition to any time you manually call these methods, it can be useful to know when the UI framework calls setNeedsLayout/setNeedsDisplay as this will trigger layoutSubviews.

    For this purpose, I will define a few view relationships:

    • View1 – UIView class, root view for examples
    • View1.1 – UIScrollView class, subview of View1
    • View1.1.1 – UIView class, subview of View1.1 (No autoresize mask)
    • View1.1.2 – UIView class, another subview of View1.1 (Autoresize mask – flexible width)

    I then ran the following tests.  An X means the view was layed out


    From this I surmise the following:

    • init does not cause layoutSubviews to be called (duh)
    • init 方法不会调用layoutSubviews
    • addSubview causes layoutSubviews to be called on the view being added, the view it’s being added to (target view), and all the subviews of the target view
    • addSubview会调用 subview窗体,subview父窗体,和subview窗体下的所有子窗体 中的layoutSubviews
    • setFrame intelligently calls layoutSubviews on the view having it’s frame set only if the size parameter of the frame is different
    • setFrame中的参数变化的时候会调用layoutSubviews
    • scrolling a UIScrollView causes layoutSubviews to be called on the scrollView, and it’s superview
    • 滚动UIScrollView会调用 scrollview,scrillview的父窗体 的layoutSubviews方法
    • rotating a device only calls layoutSubview on the parent view (the responding viewControllers primary view)
    • 旋转设备时候在 父窗体 会被调用
    • removeFromSuperview – layoutSubviews is called on superview only (not show in table)

    Hopefully this is helpful information for you as well.


    1 comment:

    I find that resizing (not moving, only resizing) any subview causes the superview to get -layoutSubviews sent to it, which I found unexpected. From your table it doesn’t look like you tested that case.

  • 相关阅读:
    Redis学习笔记(十四)Sentinel(哨兵)(上)
    Redis学习笔记(十三) 复制(下)
    Redis学习笔记(十二) 复制(上)
    搞懂推荐系统中的评价指标NDCG(CG、DCG、IDCG)
    pytorch入门3.2构建分类模型再体验(批处理)
    pytorch入门3.1构建分类模型再体验(模型和训练)
    pytorch入门3.0构建分类模型再体验(准备数据)
    一条一条的读《推荐系统实战》2.0
    pytorch入门2.2构建回归模型初体验(开始训练)
    pytorch入门2.1构建回归模型初体验(模型构建)
  • 原文地址:https://www.cnblogs.com/chenfulai/p/2235922.html
Copyright © 2011-2022 走看看