OS: 让自定义控件适应Autolayout注意的问题

转载 2015年07月06日 22:54:39

第一个是initWithCoder方法:因为开发者多在Storyboard中使用Autolayout,而Storyboard中的View初始化不是使用常见的initWithFrame方法的,而是使用initWithCoder方法来初始化View。因此自定义控件有初始化逻辑的话(如设置变量默认值什么的),注意不要只写在initWithFrame方法里。

第二个是UIViewtranslatesAutoresizingMaskIntoConstraints属性,如果使用Autolayout,则不需要将古老的AutoresizingMask转换成Autolayout的Constraint。这个属性默认是YES,不过貌似Storyboard创建时调用initWithCoder方法时控件的translatesAutoresizingMaskIntoConstraints已经是NO了。

第三个是UIViewcontentMode属性,如果在Autolayout改变控件尺寸后需要刷新drawRect,则需要设置contentMode属性为UIViewContentModeRedraw。而另一个常见的自定义控件依赖的方法:layoutSubviews,则会被自动调用,这里不需要担心。

 

那么,自定义控件的初始化可以这样写:

//UIView构造方法
- (id)initWithFrame:(CGRect)aRect
{
    if ((self = [super initWithFrame:aRect])) {
        [self commonInit];
    }
    return self;
}

//Storyboard用
- (id)initWithCoder:(NSCoder*)coder
{
    if ((self = [super initWithCoder:coder])) {
        [self commonInit];
    }
    return self;
}

- (void)commonInit
{
    /* 这里开始初始化 */
    
    //如果需要重新调用drawRect则设置contentModeUIViewContentModeRedraw
    self.contentMode = UIViewContentModeRedraw;
    //不允许从Autoresizing转换AutolayoutConstraints
    //貌似Storyboard创建时调用initWithCoder方法时translatesAutoresizingMaskIntoConstraints已经是NO
    self.translatesAutoresizingMaskIntoConstraints = NO;
}

Autolayout_自定义View

Autolayout笔记:自定义View
  • petpwiuta
  • petpwiuta
  • 2015年11月25日 18:31
  • 1113

AndroidAutoLayout使用注意事项

1.AndroidAutoLayout适配ListView、RecyclerView 转自:http://cache.baiducontent.com/c?m=9d78d513d99006e905f...
  • BINGDUCAIJUN
  • BINGDUCAIJUN
  • 2017年04月18日 10:22
  • 937

iOS 利用autolayout自定义行高仿写朋友圈界面,OC与Swift版本

在此,本文章将会提到并用到的知识1、tableview预设行高与自动布局autolayout综合使用,2、autoLayout布局在tableviewCell里的约束细节。3、关于MVC,tablev...
  • baidu_33735542
  • baidu_33735542
  • 2016年11月23日 22:20
  • 579

iOS自定义控件的问题及解决方法

今天要写一个同时包含图片和文字的按钮控件,同时支持4种显示方式:图片在文字上面、下面、左边、右边。...
  • strawman_dxj
  • strawman_dxj
  • 2015年12月15日 10:19
  • 591

AutoLayout根布局适配问题

弘洋大大的UI适配库,实现了在不同设备上的自动适配,非常方便 附上链接: Android AutoLayout全新的适配方式 堪称适配终结者遇到的问题:在LayoutInflater.from(get...
  • guohesheng
  • guohesheng
  • 2017年04月19日 15:22
  • 584

IOS autolayout自动布局实例(swift)

第四篇 对于一个新手来说,刚接触自动布局这东西,会被一种叫约束的东西搞得晕头转向,不是少添加了,就是多添加了,造成约束冲突,不过弄明白之后,也就那回事了。 首先先上个最终的效果图上来,一步步做出这...
  • shenshucong520
  • shenshucong520
  • 2015年08月18日 17:35
  • 817

使用AutoLayout布局适配时,如何提前获得AutoLayout完成适配后的子控件的真实frame

当我们使用AutoLayout做适配时,可能会有这样的需求,就是在想在适配完成前就取得子控件的真实frame,来做一些操作。比如我们想把一个正方形的UIImageView剪成一个圆形,这时候就需要这么...
  • linshaoquan
  • linshaoquan
  • 2015年06月19日 02:01
  • 3785

Android自定义view时注意

一.Android的onLayout、layout方法 onLayout方法是ViewGroup中子View的布局方法,用于放置子View的位置。放置子View很简单,只需在重写onLayout方...
  • lib739449500
  • lib739449500
  • 2016年07月07日 12:50
  • 521

iOS里面xib和AutoLayout的妙用

一直以来,我都是一个代码流,喜欢用纯代码去构建app,并觉得这是一件很酷的事情。当iPhone 5出来了,我还觉得没什么问题,但是当iPhone 6和iPhone 6 plus都出来,屏幕的分辨率一下...
  • lizujian1990
  • lizujian1990
  • 2014年12月02日 21:30
  • 1763

## iOS 中用了autolayout遮挡键盘的处理 ##

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • wangqiuwei07
  • wangqiuwei07
  • 2016年05月11日 18:42
  • 545
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OS: 让自定义控件适应Autolayout注意的问题
举报原因:
原因补充:

(最多只允许输入30个字)