首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入剖析Auto Layout,分析iOS各版本新增特性

这里要注意重写layoutSubviews()或者执行类似layoutIfNeeded这样可能会立刻唤起layoutSubviews()的方法,如果要这样做需要注意手动处理的这个地方自己的子视图布局的树状关系是否合理...布局约束规则 表达布局约束的规则可以使用一些简单的数学术语,如下表 类型 描述 值 属性 视图位置 NSLayoutAttributeLeft, NSLayoutAttributeRight, NSLayoutAttributeTop..., NSLayoutAttributeHeight 属性 视图中心 NSLayoutAttributeCenterX, NSLayoutAttributeCenterY 属性 视图的基线,在视图底部上方放置文字的地方...的view会在viewDidLayoutSubviews或-layoutSubview调用super转换成具有正确显示的frame值。...还有种情况就是两个冲突的约束的权重是一样的就会崩。 Logical Errors:布局中的逻辑错误。 不含视图项的约束不合法,每个约束至少需要引用一个视图,不然会崩。在删除视图时一定要注意。

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

    Size : 设置最小的字号大小, 设置的值是字体大小; -- Tighten Letter Spacing : 勾选该复选框 会自动压缩字符串中的空白, 保证 UILabel 能容纳这些文本中的内容...UIViewController 控制器 UIController 方法详解 : 主要用于处理视图加载, 显示等事件; -- viewDidLoad 方法 : 视图装载完成后, 自动回调该方法, 重写时注意先使用...或 关闭后, 回调该方法; -- viewWillLayoutSubviews 方法 : 视图将要排列其子视图时, 需要回调的方法; -- viewDidLayoutSubviews 方法 : 视图已经排列好其子视图后...UIViewController 中的 IBAction 方法 与 界面设计文件中的 UIButton 组件绑定; -- 触发 IBAction 方法 : 界面中的 UIButton 被点击, 就会回调...: " 方法 : 自行绘制控件内容, 重写该方法, 在该方法中实现; -- "layoutSubviews : " 方法 : 精确控制子控件布局; -- "addAddSubviews : " 方法

    5K30

    iOS面试题-UI篇

    可以响应用户事件,Xcode6之后可以方便的通过视图调试功能查看图层之间的关系 UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它。...特别是如果在我们的界面上有多个这样的UIButton实例,那就会很糟糕了 面试题持续整理更新中,如果你正在面试或者想一起进阶,不妨添加一下交流群1012951431一起交流。...因为任何控制器的view在viewDidLoad的时候的尺寸都是不准确的,如果有子控件的尺寸依赖父控件的尺寸,在这个方法中设置会导致子控件的frame不准确,所以这时应该在下面的方法中设置子控件的尺寸...-(void)viewDidLayoutSubviews; 触摸事件的传递 触摸事件的传递是从父控件传递到子控件 如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件 不能接受触摸事件的四种情况...默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的 如何找到最合适处理事件的控件: 首先,判断自己能否接收触摸事件 可以通过重写hitTest:withEvent:方法验证

    2K21

    一次模块重构的总结

    : 1.没有控件话,页面都是基本UILabel、UIButton 等贴的,而且控件之间由于一开始很简单,没有完全相对布局,里面有很多绝对坐标。...2.绝对布局对于需要根据选择的内容不同动态隐藏或者展示某块区域,某个大的模块来说是非常的不友好,大量的硬编码(y值的硬计算)使得修改和维护起来很是吃力。...3.在VC【众多自定义视图是 VC 的View的子视图】中定义所有自定义视图的下拉弹框的数据源和处理所有自定义视图的交互事件,使得代码耦合度更大,不符合开闭原则,很容易造成一处修改,误使其他模块出错的现象...2.每个小控件和大的自定义视图都自动设置自身高度,省去手动计算定值高度的麻烦。 3.隐藏/展示某个控件或者自定义视图时可以直接设置其高度,在需要改变的地方调用统一的刷新方法刷新整体布局。...【4】纯代码写页面中,所有的代码布局都应该是 相对布局,可以使用 SDAutolayout 实现完全自动布局,里面有 SC 和 Cell的自动布局,都是设置底部依据试图,设置边距即可。

    63920

    App的生命周期

    如果nibName为空或找不到对应的nib文件,则会创建一个空视图(这种情况一般是纯代码) 注意:在重写loadView方法的时候,不要调用父类的方法。...此时,视图层次已经放到内存中,通常,我们对于各种初始化数据的载入,初始设定、修改约束、移除视图等很多操作都可以这个方法中实现。...比如view的bounds改变了(例如:状态栏从不显示到显示,视图方向变化),要调整Subviews的位置,在调整之前要做的工作可以放在该方法中实现 viewDidLayoutSubviews view...viewDidAppear 在view被添加到视图层级中以及多视图,上下级视图切换时调用这个方法,在这里可以对正在显示的视图做进一步的设置。...removeFromSuperview、dealloc 两个方法,layoutSubviews 在子视图布局变动时会多次调用,所以可以在 removeFromSuperview、dealloc 这两个方法中执行释放内存等操作

    1.3K10

    谈谈 Autolayout

    layoutSubViews: 当 View 及其所有子视图的 frame 发生改变的时候,会调用 layoutSubviews,所以在需要更新 frame 来重新定位或更改大小时重载它。...因为 viewDidLayoutSubviews 是 view 布局更新后会被唯一可靠调用的方法,所以你应该把所有依赖于布局或者大小的代码放在 viewDidLayoutSubviews 中,而不是放在...setNeedsLayout 触发 layoutSubviews 调用的最省资源的方法就是在你的视图上调用 setNeedsLaylout 方法,表示视图的布局需要重新计算。...告知页面需要更新,但是不会立刻开始更新视图,视图会在下一个 runloop 中更新,调用 setNeedsLaylout 方法视图被重新绘制并布局之间会有一段任意时间的间隔。...viewDidLayoutSubviews 中即可。

    70920

    Swift:静态工厂方法

    无论是我们要根据APP的品牌设置样式的视图(View),还是要配置的视图控制器(View Controller),亦或是在测试中创建存根的值时,我们经常发现需要将设置代码放在某个地方。...(暂时), //以免将此功能添加到我们的应用程序全局使用UIButton中。...我们甚至可以在静态属性或函数中设置内部“自动布局”约束。...在这种情况下,“自动版式”的声明性确实很方便——我们可以预先指定所有约束,而不必重写任何方法或响应任何调用。 就像用于视图一样,工厂方法为我们提供了非常干净的调用方式。...特别是如果与"Swift:将子视图控制器用作插件" 中的便捷API的稍加修改版本结合使用,我们现在可以在执行异步操作时轻松添加预先配置的加载视图控制器: class ProductListViewController

    2.4K10

    如何把设计图自动转换为iOS代码? 在线等,挺急的!

    视图数据模型.内部会自动根据virtualModel的值,进行不同的处理. @property (assign, nonatomic, readonly) BOOL isTest; //!...目前能得到的效果 视图基于 AutoLayout; 视图自动适配不同屏幕尺寸; 视图完全独立于数据与业务逻辑; 视图严肃仅与父视图有位置关系; 可以将视图模块的元素与模块同名属性自动关联; 仅需知道父视图的宽高...子视图对应的属性,模块中应有属性与其对应,且可通过此属性访问对应的子视图. extern const NSString * YFViewComponentSubViewHolderWidthKey...子视图的右内边距值(right). extern const NSString * YFViewComponentSubViewHolderBottomKey; //!...子视图的底部边距值(bottom). @interface YFViewComponent : UIView /** * 子视图配置信息.

    1.4K60

    iOS_Objective-C编程规范

    ) 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 的

    71220

    iOS学习——UIPickerView的实现年月选择器

    ** 初始化子视图 ,整体布局*/ - (void)initUI; //以下三种方法在基类中的实现都是空白的,具体的效果在子类中重写 /** 点击背景遮罩图层事件 */ - (void)didTapBackgroundView...{ 127 128 } 129 130 @end   在BaseView.m中主要是对整体框架进行布局,我们的控件的位置都是通过绝对位置进行布局的,所以需要修改的在话可以直接在对应的位置上进行修改...,然后在BaseView.h中的注释我们说过了,点击背景遮罩图层和取消、确定按钮的点击事件实现效果在基类中都是空白的,具体效果在子类中进行重写来控制。...下面主要提两个问题:一个是整体布局的方法 - (void)initUI 的实现。这里大家主要要注意的添加的层次,谁是谁的子视图,一定要区分清楚。...如果直接在蒙层上添加弹出式图作为子视图的话,我们的布局相对会简单很多,这里涉及到一点就是子视图的透明度是和父视图保持一致的,如果直接将弹出视图加载到蒙层遮罩视图上,会导致弹出视图的透明度也为0.3,所以弹出视图不能直接加在蒙层遮罩视图上

    4.6K130

    Swift-MVVM 简单演练(一)

    在HQMainViewController中设置四个子控制器 用extension将代码拆分 通过反射机制,获取子控制器类名,创建子控制器 设置每个子控制的tabBar图片及标题 HQMainViewController...在自定义访客视图HQVistorView中布局各个子控件 懒加载控件 /// 图像视图 fileprivate lazy var iconImageView: UIImageView = UIImageView...自动布局本质公式 : A控件的属性a = B控件的属性b * 常数 + 约束 firstItem.firstAttribute {==,=} secondItem.secondAttribute...点击四个子控制器的时候,访客视图打印的地址都不一样。...这样做的目的是外界传入到HQBaseViewController中信息字典,可以通过setupVistorView方法传到HQVistorView中,再重写HQVistorView中的访客视图信息字典的

    10.3K51

    Swift 自定义布局实现 Cover Flow 效果

    中该如何创建自定义布局。...但是上一篇中实现的自定义布局稍显简单,只能说是比较粗略的计算了下布局各个 item 的位置,搞明白了继承自 UICollectionFlowLayout 子类它需要重载的方法的意义,那么今天这篇文章我们就来实现一个更加复杂的自定义布局...的滚动方向是横向的 随着 UICollectionView 滚动,Cell 会自动的进行缩放,当 Cell 的中心点与 UICollectionView 的中心点重合时放大,偏离中心点时缩小 Cell...x 坐标,然后遍历每一个 Cell 的布局,找出它的中心点 x 坐标,并计算这俩个 x 坐标的偏移值,俩者的距离越小,缩放比越小,反之则越大,我这边设定缩放比最大为 1,当俩者的 x 坐标重合时,也就是没有偏移值的时候...,那剩下的就是在视图控制器中呈现了,这一步实现起来很简单,也不做赘述了,直接看源码: // // CoverFlowViewController.swift // SwiftScrollBanner

    1.8K20

    UIButton实现各种图文结合的效果以及原理

    两个子视图;而有的人则不会用UIButton来实现图文结合的功能。...答案是否定的,其实UIButton本身是可以支持各种图文结合的,既然UIButton上能同时显示图片和文字,那就可以肯定的说UIButton里面本身一定有一个UIImageView和UILabel8子视图...那既然UIButton本身就带有一个图片控件和文本控件,那是不是我们只要分别通过调整子控件的frame值就能实现我们想要的图片文字的任何布局呢? 答案是否定的。..., 两者相减就是水平需要偏移的值,又因为默认的情况下当按钮比较小时会自动保留图片的尺寸和将文字部分缩小,因为当我们实现文字和图片上下布局时,需要将文字的区域扩展到整个按钮部分,否则将会缩小按钮的文字的宽度...对象并且指定一个具体的frame值或者自动布局的约束尺寸后,并且调用setTitle:forState:和setImage:forSate:后再调用: UIButton *button = [[UIButton

    3K10
    领券