• 使用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][0];
        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!

    不要问我为什么,我怎么知道!

    后面会知道,嗯,会的!

  • 相关阅读:
    在Ubuntu下安装Apache
    linux 安装jdk 配置tomcat
    linux命令——rmdir
    linux命令——rm
    WebApi路由解析增加版本控制
    eclipse Dynamic web module相关问题
    mysql 5.7.18 windows zip安装
    微信扫描二维码登录网站技术原理
    Maven实战(八)——常用Maven插件介绍(下)
    Maven实战(七)——常用Maven插件介绍(上)
  • 原文地址:https://www.cnblogs.com/PaulpauL/p/9143694.html
Copyright © 2020-2023  润新知