使用Xib创建自定义视图(不是cell)时需要注意的问题
开发项目过程中,有些地方不免会用到Xib来提高开发效率,如果你的手速够快,写代码建视图,我并不反对这样做。因为我以前也是纯手写代码开发。
进入正题,Xib好用,但是这些下面这些问题需要注意一下。
问题一:
Xib在使用的时候不能修改frame的宽高。
还原场景:
在一个列表的顶部会有各种banner,各种模块入口,以及广告位。在某些操作后需要酷炫的弹出框,有什么活动大红包什么的,使用Xib搭建页面都可以优雅的完成。
核心代码:
- (instancetype)initWithHeaderFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self = [[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil][];
self.frame = frame;
}
return self;
}
上面代码先去执行父类view的initWithFrame方法,然后使用loadNibNamed加载Xib资源,从而创建视图本身self。
接下来有一步操作self.frame = frame;这个是重点,这一步就可以将外部传进来的frame传给Xib。从而实现修改frame的宽高。
不要着急运行,上面这些操作要想生效还需要下面的修改,这是重点中的重点
核心操作:
Xcode在创建View时不能同时创建Xib,需要单独创建并关联到同名.h.m文件。创建好Xib后,需要将Simulated Metris的size设置为Freeform,然后将按照下图中的样子设置
红框内的横向竖向箭头默认是选中的,他们会使视图保持Xib内frame,从而无法在外部修改frame。over!谈下一话题
问题2:谈iOS的Safe Area真的Safe吗?Xib居然在plus上变形了!【笑哭的表情】
场景同问题一的~>~
6,7,8,X都好好的,可是换成plus后,神奇的现象出现了,有的控件居然没有按约束来。
尝试了修改约束,修改Autoresizing,去掉动画,都无效,此时内心是崩溃的【泪奔的表情】
无意间看到每个出问题的控件都有个共同点,就是都设置了Safe Area Relative Margins属性。
程序在于折腾,先试试再说!(在遇到未知情况时,这是无奈之举。度娘,谷哥,Stack Overflow都没找到,只能这样去试了)
更神奇的现象出现了,It works!
不要问我为什么,我怎么知道!
后面会知道,嗯,会的!
使用Xib创建自定义视图(不是cell)时需要注意的问题的更多相关文章
- 雷林鹏分享:jQuery EasyUI 数据网格 - 创建自定义视图
jQuery EasyUI 数据网格 - 创建自定义视图 在不同的情况下,您可能需要为数据网格(datagrid)运用更灵活的布局.对于用户来说,卡片视图(Card View)是个不错的选择.这个工具 ...
- 创建自定义视图在Android矩阵效果画布教程
介绍 下面是一个快速教程,教你如何在Android中创建自定义视图.自定义视图创建一个矩阵雨效果. 本教程发布在http://www.androidlearner.com/. 背景 下面是关于如何工作 ...
- (翻译)为你的MVC应用程序创建自定义视图引擎
Creating your own MVC View Engine For MVC Application 原文链接:http://www.codeproject.com/Articles/29429 ...
- [Swift实际操作]九、完整实例-(7)登录页面:创建自定义视图及相关组件Swift实际操作
本文将开始创建登录页面,首先创建该页面所需的一些自定义组件:做为登录按钮的自定义视图对象.在[RegLogin]组的名称上点击鼠标右键,打开右键菜单.[New File]->[Cocoa Tou ...
- xadmin 自定义视图在uwsgi部署时的一坑
比如修改登录页的template,代码如下: xadmin.site.register(xadmin.views.LoginView, login_template="card_pool/s ...
- Android 创建自定义 View 的属性 (attrs) 时需要注意的问题
自定义 View 的属性并不难,可以参照官方的文档 https://developer.android.com/training/custom-views/create-view.html 但是需要注 ...
- ##DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告
##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...
- UI 自定义视图 ,视图管理器
一>自定义label - textField 视图 自定义视图:系统标准UI之外,自己组合而出的新的视图 iOS 提供了很多UI组件 ,借助它们,我们可以做各种程序 尽管如此,实际开发中,我们还 ...
- iOS创建自定义的xib视图,不带控制器调用
1 我们平常使用视图都是在控制器中加载各种视图,但是有时候一个单独的视图,弄一个控制器未免有些显得太沉重了,所以我们现在来创建一个带xib加载视图的自定义视图 2 创建一个视图类集成uiview 3 ...
随机推荐
- SqlAlchemy使用详解
python之sqlalchemy创建表的实例详解 通过sqlalchemy创建表需要三要素:引擎,基类,元素 from sqlalchemy import create_engine from sq ...
- jquery后加Dom绑定事件
$('#musicCategoryListContainer').on('click', '.musicCategoryItem', function () { $(this).siblings(). ...
- TreeSet排序,存储自己定义对象,自己定义比較器演示样例
Set:无序.不能够反复元素. |--HashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:推断元素的hashCode值是否同样. 假设同样,还会继续推断元素的equals方法.是 ...
- 编程之美 set 10 队列中取最大值操作问题
题目 假设有这样一个拥有三个操作的队列 1. Enqueue(v) 2. Dequeue() 3. MaxEle() 请设计一种数据结构和算法, 让 MAXELE 操作的时间复杂度尽可能的低 思路 1 ...
- 安装PHP扩展-----phpredis
一.redis介绍 redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了 memcached的不足,它支持存储的value类型相 ...
- 160311、mybatis sql语句中转义字符
问题: 在mapper ***.xml中的sql语句中,不能直接用大于号.小于号要用转义字符 解决方法: 1.转义字符串 小于号 < < 大于号 > & ...
- Hibernate的批量处理和分页技术、投影技术
投影查询——过滤部分字段返回的List集合元素为Object[] Query query = session.createQuery("select c.cname, c.csex from ...
- c# winform 应用程序根据条件阻止窗口关闭
//添加窗口关闭事件委托 在窗口关闭事件中处理 private void TestForm_FormClosing(object sender, FormClosingEventArgs e) { s ...
- hdu2254 奥运 矩阵的应用
hdu2254 奥运 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2254 题意:题目让我们求得是的可以得到的金牌数量,而和金牌数量=在t1到t2天( ...
- 对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高不少,并且不受NTP等外部服务影响,能准确更准确来统计耗时(java中对应的是System.nanoTime),也就是说所有使用gettimeofday来统计耗时(java中是System.curre
对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高 ...