btn.enabled = isAllowOperation; } } 大家可以看出来,我们便利了 self.navigationController.navigationBar所有的子试图...这是系统内部的数组,我们不清楚系统怎么添加的,简单的拦截 NSArray的添加元素方法或者重写或者会出现其他的问题。...唯一方法就是我们怎么知道界面展示的时候,什么时候子试图里面才有 Done这个按钮。 经过测试, viewDidLayoutSubviews方法和 viewDidAppear方法都可以获取到这个按钮。...但是调用是 viewDidLayoutSubviews在 viewDidAppear之前。我们为了不出现页面已经出现在用户严重,按钮 Done从可用变成不可用。...我们在 viewDidLayoutSubviews 方法里面来进行判断。
这里要注意重写layoutSubviews()或者执行类似layoutIfNeeded这样可能会立刻唤起layoutSubviews()的方法,如果要这样做需要注意手动处理的这个地方自己的子视图布局的树状关系是否合理...布局约束规则 表达布局约束的规则可以使用一些简单的数学术语,如下表 类型 描述 值 属性 视图位置 NSLayoutAttributeLeft, NSLayoutAttributeRight, NSLayoutAttributeTop..., NSLayoutAttributeHeight 属性 视图中心 NSLayoutAttributeCenterX, NSLayoutAttributeCenterY 属性 视图的基线,在视图底部上方放置文字的地方...的view会在viewDidLayoutSubviews或-layoutSubview调用super转换成具有正确显示的frame值。...还有种情况就是两个冲突的约束的权重是一样的就会崩。 Logical Errors:布局中的逻辑错误。 不含视图项的约束不合法,每个约束至少需要引用一个视图,不然会崩。在删除视图时一定要注意。
Size : 设置最小的字号大小, 设置的值是字体大小; -- Tighten Letter Spacing : 勾选该复选框 会自动压缩字符串中的空白, 保证 UILabel 能容纳这些文本中的内容...UIViewController 控制器 UIController 方法详解 : 主要用于处理视图加载, 显示等事件; -- viewDidLoad 方法 : 视图装载完成后, 自动回调该方法, 重写时注意先使用...或 关闭后, 回调该方法; -- viewWillLayoutSubviews 方法 : 视图将要排列其子视图时, 需要回调的方法; -- viewDidLayoutSubviews 方法 : 视图已经排列好其子视图后...UIViewController 中的 IBAction 方法 与 界面设计文件中的 UIButton 组件绑定; -- 触发 IBAction 方法 : 界面中的 UIButton 被点击, 就会回调...: " 方法 : 自行绘制控件内容, 重写该方法, 在该方法中实现; -- "layoutSubviews : " 方法 : 精确控制子控件布局; -- "addAddSubviews : " 方法
可以响应用户事件,Xcode6之后可以方便的通过视图调试功能查看图层之间的关系 UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它。...特别是如果在我们的界面上有多个这样的UIButton实例,那就会很糟糕了 面试题持续整理更新中,如果你正在面试或者想一起进阶,不妨添加一下交流群1012951431一起交流。...因为任何控制器的view在viewDidLoad的时候的尺寸都是不准确的,如果有子控件的尺寸依赖父控件的尺寸,在这个方法中设置会导致子控件的frame不准确,所以这时应该在下面的方法中设置子控件的尺寸...-(void)viewDidLayoutSubviews; 触摸事件的传递 触摸事件的传递是从父控件传递到子控件 如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件 不能接受触摸事件的四种情况...默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的 如何找到最合适处理事件的控件: 首先,判断自己能否接收触摸事件 可以通过重写hitTest:withEvent:方法验证
:控制器的view将要显示 viewWillLayoutSubviews:控制器的view将要布局子控件 viewDidLayoutSubviews:控制器的view布局子控件完成 viewDidAppear...setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据。....这样可以在控制器中设置一些值给View(如果这些View draw的时候需要用到某些变量 值). 2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。...然后系统自动调用drawRect:方法。 3、通过设置contentMode属性值为UIViewContentModeRedraw。...那么将在每次设置或更改frame的时候自动调用drawRect:。
: 1.没有控件话,页面都是基本UILabel、UIButton 等贴的,而且控件之间由于一开始很简单,没有完全相对布局,里面有很多绝对坐标。...2.绝对布局对于需要根据选择的内容不同动态隐藏或者展示某块区域,某个大的模块来说是非常的不友好,大量的硬编码(y值的硬计算)使得修改和维护起来很是吃力。...3.在VC【众多自定义视图是 VC 的View的子视图】中定义所有自定义视图的下拉弹框的数据源和处理所有自定义视图的交互事件,使得代码耦合度更大,不符合开闭原则,很容易造成一处修改,误使其他模块出错的现象...2.每个小控件和大的自定义视图都自动设置自身高度,省去手动计算定值高度的麻烦。 3.隐藏/展示某个控件或者自定义视图时可以直接设置其高度,在需要改变的地方调用统一的刷新方法刷新整体布局。...【4】纯代码写页面中,所有的代码布局都应该是 相对布局,可以使用 SDAutolayout 实现完全自动布局,里面有 SC 和 Cell的自动布局,都是设置底部依据试图,设置边距即可。
自动布局 02 Mar 2016 Comments 前言 最近遇到一个复杂视图:根控制器里面有上下两个子控制器,子控制器中各自实现类似PageView的视图,然后PageView的每一页是一个WebView...记录下自动布局中遇到的几个坑。...(或者Masonry)之类的工具进行自动布局。...注意 先添加子视图,才能对子试图添加约束 如果想使用动画效果,需要如下代码: //重写updateViewConstraints方法,进行约束的更新- (void)updateViewConstraints...self.isBigger; }]; button;}); 关于UIScrollView的自动布局 上面提到的页面遇到了多重的UIScrollView,使用自动布局的时候也是够蛋疼的。
如果nibName为空或找不到对应的nib文件,则会创建一个空视图(这种情况一般是纯代码) 注意:在重写loadView方法的时候,不要调用父类的方法。...此时,视图层次已经放到内存中,通常,我们对于各种初始化数据的载入,初始设定、修改约束、移除视图等很多操作都可以这个方法中实现。...比如view的bounds改变了(例如:状态栏从不显示到显示,视图方向变化),要调整Subviews的位置,在调整之前要做的工作可以放在该方法中实现 viewDidLayoutSubviews view...viewDidAppear 在view被添加到视图层级中以及多视图,上下级视图切换时调用这个方法,在这里可以对正在显示的视图做进一步的设置。...removeFromSuperview、dealloc 两个方法,layoutSubviews 在子视图布局变动时会多次调用,所以可以在 removeFromSuperview、dealloc 这两个方法中执行释放内存等操作
layoutSubViews: 当 View 及其所有子视图的 frame 发生改变的时候,会调用 layoutSubviews,所以在需要更新 frame 来重新定位或更改大小时重载它。...因为 viewDidLayoutSubviews 是 view 布局更新后会被唯一可靠调用的方法,所以你应该把所有依赖于布局或者大小的代码放在 viewDidLayoutSubviews 中,而不是放在...setNeedsLayout 触发 layoutSubviews 调用的最省资源的方法就是在你的视图上调用 setNeedsLaylout 方法,表示视图的布局需要重新计算。...告知页面需要更新,但是不会立刻开始更新视图,视图会在下一个 runloop 中更新,调用 setNeedsLaylout 方法视图被重新绘制并布局之间会有一段任意时间的间隔。...viewDidLayoutSubviews 中即可。
> 等属性 -调用 setNeedsLayout 方法以标记该视图(或者它的子视图)为需要进行布局更新 -调用 setNeedsDisplay 或者...会更新它的子视图 如果任何视图的任何部分被标记为需要重画,UIKit 会要求视图重画自身 任何已经更新的视图会与应用余下的可视内容组合在一起,同时被发送到图形硬件去显示 图形硬件将已解释内容转化到屏幕上...,以表示后续应该调用 layoutSubviews 方法,以调整当前视图及其子视图的布局。...,在子类中重写这些方法,然后分别通过 setNeedsLayout 和 setNeedsDisplayInRect: 来进行调用。...中我们通过 UIKit 得到的 UIView 重布局、重绘机会所组成的循环**。
无论是我们要根据APP的品牌设置样式的视图(View),还是要配置的视图控制器(View Controller),亦或是在测试中创建存根的值时,我们经常发现需要将设置代码放在某个地方。...(暂时), //以免将此功能添加到我们的应用程序全局使用UIButton中。...我们甚至可以在静态属性或函数中设置内部“自动布局”约束。...在这种情况下,“自动版式”的声明性确实很方便——我们可以预先指定所有约束,而不必重写任何方法或响应任何调用。 就像用于视图一样,工厂方法为我们提供了非常干净的调用方式。...特别是如果与"Swift:将子视图控制器用作插件" 中的便捷API的稍加修改版本结合使用,我们现在可以在执行异步操作时轻松添加预先配置的加载视图控制器: class ProductListViewController
视图数据模型.内部会自动根据virtualModel的值,进行不同的处理. @property (assign, nonatomic, readonly) BOOL isTest; //!...目前能得到的效果 视图基于 AutoLayout; 视图自动适配不同屏幕尺寸; 视图完全独立于数据与业务逻辑; 视图严肃仅与父视图有位置关系; 可以将视图模块的元素与模块同名属性自动关联; 仅需知道父视图的宽高...子视图对应的属性,模块中应有属性与其对应,且可通过此属性访问对应的子视图. extern const NSString * YFViewComponentSubViewHolderWidthKey...子视图的右内边距值(right). extern const NSString * YFViewComponentSubViewHolderBottomKey; //!...子视图的底部边距值(bottom). @interface YFViewComponent : UIView /** * 子视图配置信息.
子 View 的顺序和子 View 返回的数组中的位置有关(storyboard 中左侧的树形结构图中的先后顺序)。...override func viewDidLoad() { super.viewDidLoad() } // 自动布局时放这里 override func viewDidLayoutSubviews...直接在 storyboard 中布局,不需要使用数据源方法,但如果需要使用到代理方法,仍然需要在控制器中实现相应的方法。 适用于基本不需要动态修改、布局固定的页面,如个人中心、设置等。...一般用于自适应大小,会根据自动布局决定元素的大小。...如果是自定义布局,需要传入一个 NSCollectionLayoutGroupCustomItemProvider 来决定这个 Group 中 Item 的布局方式。
) 6.2 【必须】重写指定初始化方法 6.3 【必须】初始化函数简洁 6.4 【必须】保持公共 API 简单 7 Cocoa 相关 7.2 【必须】视图布局 8 单测相关 8.1、单例的`mock`...如果已经在文件头部详细描述了接口,可以直接说明 “完整的描述请参见文件头部”。 对外暴露的所有接口都应该有注释来解释它的作用、参数、返回值。 对外暴露的接口应该在注释中说明线程安全性。...函数的边界(参数的要求、返回值的范围、是否返回为空)要在注释中写明,且在代码中明确检查,包括断言及if判断。...:(NSInterger)type NS_DESIGNATED_INITIALIZER; 6.3 【必须】初始化函数简洁 6.4 【必须】保持公共 API 简单 7 Cocoa 相关 7.2 【必须】视图布局...建议在界面布局时使用相对布局,例如: 使用目标view在父view中的相对位置 使用目标view与相关view中的相对位置 使用目标view与相邻view中的相对位置 当访问一个 CGRect 的
** 初始化子视图 ,整体布局*/ - (void)initUI; //以下三种方法在基类中的实现都是空白的,具体的效果在子类中重写 /** 点击背景遮罩图层事件 */ - (void)didTapBackgroundView...{ 127 128 } 129 130 @end 在BaseView.m中主要是对整体框架进行布局,我们的控件的位置都是通过绝对位置进行布局的,所以需要修改的在话可以直接在对应的位置上进行修改...,然后在BaseView.h中的注释我们说过了,点击背景遮罩图层和取消、确定按钮的点击事件实现效果在基类中都是空白的,具体效果在子类中进行重写来控制。...下面主要提两个问题:一个是整体布局的方法 - (void)initUI 的实现。这里大家主要要注意的添加的层次,谁是谁的子视图,一定要区分清楚。...如果直接在蒙层上添加弹出式图作为子视图的话,我们的布局相对会简单很多,这里涉及到一点就是子视图的透明度是和父视图保持一致的,如果直接将弹出视图加载到蒙层遮罩视图上,会导致弹出视图的透明度也为0.3,所以弹出视图不能直接加在蒙层遮罩视图上
关于Autolayout和Masonry自动布局的几个坑 自动布局 02 Mar 2016 0 Comments 前言 最近遇到一个复杂视图:根控制器里面有上下两个子控制器,子控制器中各自实现类似PageView...记录下自动布局中遇到的几个坑。...(或者Masonry)之类的工具进行自动布局。...注意 先添加子视图,才能对子试图添加约束 如果想使用动画效果,需要如下代码: //重写updateViewConstraints方法,进行约束的更新-(void)updateViewConstraints...self.isBigger;}];button;}); 关于UIScrollView的自动布局 上面提到的页面遇到了多重的UIScrollView,使用自动布局的时候也是够蛋疼的。
在HQMainViewController中设置四个子控制器 用extension将代码拆分 通过反射机制,获取子控制器类名,创建子控制器 设置每个子控制的tabBar图片及标题 HQMainViewController...在自定义访客视图HQVistorView中布局各个子控件 懒加载控件 /// 图像视图 fileprivate lazy var iconImageView: UIImageView = UIImageView...自动布局本质公式 : A控件的属性a = B控件的属性b * 常数 + 约束 firstItem.firstAttribute {==,=} secondItem.secondAttribute...点击四个子控制器的时候,访客视图打印的地址都不一样。...这样做的目的是外界传入到HQBaseViewController中信息字典,可以通过setupVistorView方法传到HQVistorView中,再重写HQVistorView中的访客视图信息字典的
中该如何创建自定义布局。...但是上一篇中实现的自定义布局稍显简单,只能说是比较粗略的计算了下布局各个 item 的位置,搞明白了继承自 UICollectionFlowLayout 子类它需要重载的方法的意义,那么今天这篇文章我们就来实现一个更加复杂的自定义布局...的滚动方向是横向的 随着 UICollectionView 滚动,Cell 会自动的进行缩放,当 Cell 的中心点与 UICollectionView 的中心点重合时放大,偏离中心点时缩小 Cell...x 坐标,然后遍历每一个 Cell 的布局,找出它的中心点 x 坐标,并计算这俩个 x 坐标的偏移值,俩者的距离越小,缩放比越小,反之则越大,我这边设定缩放比最大为 1,当俩者的 x 坐标重合时,也就是没有偏移值的时候...,那剩下的就是在视图控制器中呈现了,这一步实现起来很简单,也不做赘述了,直接看源码: // // CoverFlowViewController.swift // SwiftScrollBanner
产品经理还要求内容默认显示一行,超过省略号表示,点击上去再全部显示,小明想这也容易,在FeedCellModel中加一个表示是否展开的bool量isExpand,然后didSelect代理方法中改变这个值并且...第二个需求:点赞 在第二版的计划中,产品经理设计了点赞的功能,如图 于是小明又在FeedCell里加上了这几行代码 var favorBtn: UIButton var favorLable...CollectionView 中的一个 section 中的 cell。...周一一上班,小明就开始动手用IGListKit重写上面的需求。...ListStackedSectionController,它是来管理子sectionController的。
两个子视图;而有的人则不会用UIButton来实现图文结合的功能。...答案是否定的,其实UIButton本身是可以支持各种图文结合的,既然UIButton上能同时显示图片和文字,那就可以肯定的说UIButton里面本身一定有一个UIImageView和UILabel8子视图...那既然UIButton本身就带有一个图片控件和文本控件,那是不是我们只要分别通过调整子控件的frame值就能实现我们想要的图片文字的任何布局呢? 答案是否定的。..., 两者相减就是水平需要偏移的值,又因为默认的情况下当按钮比较小时会自动保留图片的尺寸和将文字部分缩小,因为当我们实现文字和图片上下布局时,需要将文字的区域扩展到整个按钮部分,否则将会缩小按钮的文字的宽度...对象并且指定一个具体的frame值或者自动布局的约束尺寸后,并且调用setTitle:forState:和setImage:forSate:后再调用: UIButton *button = [[UIButton
领取专属 10元无门槛券
手把手带您无忧上云