开发项目过程中,有些地方不免会用到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. Pecan

    什么是peacn Pecan是一个轻量级的基于Python的Web框架, Pecan的目标并不是要成为一个“full stack”的框架, 因此Pecan本身不支持类似Session和Database ...

  2. poj_3415 后缀数组+单调栈

    题目大意 定义字符串T的子串T(i, k)=TiTi+1...Ti+k-1, 1≤i≤i+k-1≤|T|. 给定两个字符串A和B,定义集合S为S = {(i, j, k) | k≥K, A(i, k) ...

  3. 【BZOJ3442】学习小组 费用流

    [BZOJ3442]学习小组 Description [背景] 坑校准备鼓励学生参加学习小组. [描述] 共有n个学生,m个学习小组,每个学生有一定的喜好,只愿意参加其中的一些学习小组,但是校领导为学 ...

  4. 《从零开始学Swift》学习笔记(Day 68)——Cocoa Touch设计模式及应用之响应者链与触摸事件

    原创文章,欢迎转载.转载请注明:关东升的博客 应用与用户进行交互,依赖于各种各样的事件.事件响应者对象是可以响应事件并对其进行处理的对象,响应者链是由一系列链接在一起的响应者组成的.响应者链在事件处理 ...

  5. spring boot 加载jsp

    1.spring boot启动类继承SpringBootServletInitializer ,并且重写configure方法 package com.springapp.mvc;import jav ...

  6. [iOS微博项目 - 3.5] - 封装业务

    github: https://github.com/hellovoidworld/HVWWeibo   A.封装微博业务 1.需求 把微博相关业务(读取.写微博) 界面控制器不需要知道微博操作细节( ...

  7. ui-router 视图嵌套时指定二级视图显示默认页面

    当跳转到user页面时,右边的uiview是为空的,要点击了左侧的导航才能插入模板,如何在路由中设置二级视图的默认显示页面呢? app.config(function($stateProvider, ...

  8. 简单JS旋转实现转盘抽奖效果

    闲来没事,做了一个模拟转盘抽奖的HTML&JS的效果: 可以在设置的时候,选择几个区域,并且可以填写指针将要停止的区域 比如,我选择了"区域2",结果就是这样 具体可以见下 ...

  9. java中的 final 关键字 修饰引用时的问题

    final使得被修饰的变量”不变”,但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变. 引用本身的不变: final StringBuffer a= ...

  10. Buy the souvenirs---hdu2126(01背包输出方案数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 有n个物品每个物品的价格是v[i],现在有m元钱问最多买多少种物品,并求出有多少种选择方法: 如 ...