开发项目过程中,有些地方不免会用到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)时需要注意的问题的更多相关文章

  1. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建自定义视图

    jQuery EasyUI 数据网格 - 创建自定义视图 在不同的情况下,您可能需要为数据网格(datagrid)运用更灵活的布局.对于用户来说,卡片视图(Card View)是个不错的选择.这个工具 ...

  2. 创建自定义视图在Android矩阵效果画布教程

    介绍 下面是一个快速教程,教你如何在Android中创建自定义视图.自定义视图创建一个矩阵雨效果. 本教程发布在http://www.androidlearner.com/. 背景 下面是关于如何工作 ...

  3. (翻译)为你的MVC应用程序创建自定义视图引擎

    Creating your own MVC View Engine For MVC Application 原文链接:http://www.codeproject.com/Articles/29429 ...

  4. [Swift实际操作]九、完整实例-(7)登录页面:创建自定义视图及相关组件Swift实际操作

    本文将开始创建登录页面,首先创建该页面所需的一些自定义组件:做为登录按钮的自定义视图对象.在[RegLogin]组的名称上点击鼠标右键,打开右键菜单.[New File]->[Cocoa Tou ...

  5. xadmin 自定义视图在uwsgi部署时的一坑

    比如修改登录页的template,代码如下: xadmin.site.register(xadmin.views.LoginView, login_template="card_pool/s ...

  6. Android 创建自定义 View 的属性 (attrs) 时需要注意的问题

    自定义 View 的属性并不难,可以参照官方的文档 https://developer.android.com/training/custom-views/create-view.html 但是需要注 ...

  7. ##DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告

    ##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...

  8. UI 自定义视图 ,视图管理器

    一>自定义label - textField 视图 自定义视图:系统标准UI之外,自己组合而出的新的视图 iOS 提供了很多UI组件 ,借助它们,我们可以做各种程序 尽管如此,实际开发中,我们还 ...

  9. iOS创建自定义的xib视图,不带控制器调用

    1 我们平常使用视图都是在控制器中加载各种视图,但是有时候一个单独的视图,弄一个控制器未免有些显得太沉重了,所以我们现在来创建一个带xib加载视图的自定义视图 2 创建一个视图类集成uiview 3 ...

随机推荐

  1. 编程之美 set 7 求数组中的最长递增子序列

    解法 1. 假设在目标数组 array[] 的前 i 个元素中, 最长递增子序列的长度为 LIS[i] 那么状态转移方程为 LIS[i] = max(1, LIS[k]+1) array[i+1] & ...

  2. ios开发之--系统控件显示中文

    虽然一直知道X-code肯定提供有语言本地化的设置地方,但是一直也做个记录,有些时候的汉化,还是需要使用代码去控制,键盘的右下角.navagiton的return使用代码修改,调用系统相机时,也是出现 ...

  3. com.mysql.jdbc.MysqlDataTruncation: Data trunca...

    连接的是mysql数据库,插入数据时,控制台报: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for colu ...

  4. 当苹果因为UIDevice、udid、uniqueIdentifier而把我们的应用拒之门外invalid binary的时候,呕心沥血解决方法啊

    本文转载至 http://blog.csdn.net/macmini/article/details/16341669 当我们辛辛苦苦把应用或者游戏做好的时候,满怀激动地把应用提交上去给苹果大大,谁知 ...

  5. Android之背景颜色小知识(笔记)

    一.ListView的item背景(自定义颜色) 通常情况下,ListView的item背景用的是图片资源,下面跟大家分享一下使用颜色资源,即自定义一种颜色,当item聚焦.按压.选择的时候,可以显示 ...

  6. [SharePoint 2010] Visual Studio 2010內撰寫視覺化WebPart超簡單

    新一代的Visual Studio 2010對於SharePoint 2010的專案撰寫,有非常另人讚賞的改進. 以往寫一個WebPart要搞好多雜七雜八的步驟,也要硬寫HTML輸出,當然有人說可以寫 ...

  7. 面试之三:JVM类加载机制-类加载各阶段说明和类加载器

    一.类生命周期:共7个阶段 类从被加载到虚拟机内存中开始,到卸载出内存.整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载7个阶段. 其中验证.准备.解析3个部分统称为连接. 类加载的过程: ...

  8. CodeForces 639 A

    Bear and Displayed Friends time limit per test2 seconds memory limit per test256 megabytes inputstan ...

  9. 修改NavigationBar的分根线颜色

    [self.navigationController.navigationBar setShadowImage:[Static ColorToImage:[Static colorWithHexStr ...

  10. 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...