iOS自定义控件的问题及解决方法
来源:互联网 发布:德哈维兰 知乎 编辑:程序博客网 时间:2024/06/02 03:50
[[NSBundle mainBundle] loadNibNamed:@"ImageTitleButton" owner:self options:nil];方式从xib加载内容视图。但是,由于布局有4种方式可选,因此不能在xib中添加约束。所以还是采用masonry进行布局(复用纯代码中的布局代码)。结果问题来了,图片的显示是正常的,但是label的约束死活不起效果,总是显示为xib中拖放的位置和大小。几经周折,最后无奈接受了一点:在xib中创建视图,而在代码中为其添加约束,这种方法不可取,经常会出现各种莫名其妙的问题(笔者之前已经因为这种做法导致的各种视图不显示、显示不正常,已经浪费了很多时间。。。)。
如果xcode输出以下错误信息,而代码添加的约束确实不存在冲突等问题,那有可能就是用代码为xib中的视图创建约束导致的。
最后,纠结好久没法解决后,就尝试换了一种思路。一开始,想在initWithCoder方法中转调initWithFrame,即如下所示:
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
[self initWithFrame:CGRectZero];
returnself;
}
结果发现不行,又换成如下方式:
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
if (self = [superinitWithCoder:aDecoder]) {
[selfaddSubviews];
}
returnself;
}
其中addSubviews是代码中创建UIImageView和UILabel的函数:
- (void)addSubviews {
_imageView = [[UIImageViewalloc] init];
[selfaddSubview:_imageView];
_titleLabel = [[UILabelalloc] init];
[selfaddSubview:_titleLabel];
}
autolayout还是之前的masonry代码,这次终于成功了。总结一下,一定不要用用代码为xib中的视图创建约束。如果是界面里添加的视图,就在界面上使用autolayout;如果像本文这样不是布局不是静态的,而是比较灵活、运行时才能确定、且区别较大、必须用代码写约束的,那就在代码中创建视图。这并不影响最后整体的自定义控件从界面创建,因为可以参照上述initWithCoder方法,将界面创建转化为纯代码方式。
- iOS自定义控件的问题及解决方法
- iOS自定义控件要注意的问题
- iOS开发-自定义控件的方式及注意(一)
- iOS开发-自定义控件的方式及注意
- iOS开发-自定义控件的方式及注意
- iOS开发-自定义控件的方式及注意
- iOS开发-自定义控件的方式及注意
- ListView控件复用带来的问题及解决方法
- 标签控件中显示对话框出现的问题及解决方法
- 移植自定义View过程中遇到的问题及解决方法
- android 自定义键盘碰到的问题及解决方法
- iOS: 让自定义控件适应Autolayout注意的问题
- Android使用自定义控件遇到的问题及解决
- 自定义控件(子类化)和系统控件一起布局出现问题的解决方法
- IOS AFNetworking 使用时遇到的问题及解决方法
- iOS swift 关于NavigationController遇到的一些问题及解决方法
- iOS常见的闪退问题及解决方法
- iOS接入ShareSDK时可能出现的问题及解决方法
- 本地保存图片的几种思路
- JAVA+Selenium 开发环境搭建
- HDU 1864 —— 最大报销额 01背包
- 杭电ACM5512
- IOS8 AutoLayout和size classes 详解
- iOS自定义控件的问题及解决方法
- Android Studio 快捷键
- 微信开发学习总结-3
- 理解 java volatile,transient关键字
- cmd的命令不能使用解决方法
- startActivityForResult用法详解及实例
- 循环链表
- CAGradientLayer处理颜色渐变效果
- EventBus基础教程解析,一分钟学会EventBus的使用