iOS开发工作中很多开发人员不愿意使用xib,其中很明显的缺点就是不好维护,遇到问题不好查找。另外还有一层原因,他们长时间没有使用了,所以对xib陌生了,所以就不想使用。但是优点也同样明显,UI布局快、直观。为了不把有限的时间浪费在搭建UI界面上,所以我依然选择使用。但是使用过程中确实遇到了很多坑,记录下来避免以后遇到同样的问题花费时间解决;同时也为遇到同样问题的同行提供便利
![](https://img.haomeiwen.com/i4625389/4a9e8cdb798a6488.png)
开发这个界面时打算通过xib约束cell自适应行高,后来浪费了我大半天时间怎么搞都实现不了,最后选择了放弃,在修改的过程中发现了问题。
标题和子标题控件都是重复的引用了xib中的同一个UILabel所以造成怎么计算行高都不对
xib的继承要添加这段代码
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:NSStringFromClass([self.superclass class]) bundle:nibBundleOrNil];
return self;
}
xib自定义view改变不了frame的2个解决方案
- 自定义view内部重写drawRect方法(这个方法可能有问题)
- (void)drawRect:(CGRect)rect {
self.frame = CGRectMake(0, 0, kScreenWidth, 50);
}
-
取消选中Autoresizing(用这个方案)
取消选中Autoresizing
粘贴复制控件
- 复制比较简单,选中左侧要复制的view,command + C即可
- 粘贴容易出错;
- 先在要粘贴的空白view上任意添加一个控件,例如label
-
点击选中label,然后command + V 粘贴即可
复制.png
粘贴.png
显示安全区域
xcode9之前搭建的xib界面,现在要适配iPhone X系列的安全区域,找了很久没有找到,后来终于找到了点击最左侧show the file inspector,然后勾选Use Safe Area Layout Guides
![](https://img.haomeiwen.com/i4625389/71b1536dfcacc18e.png)
TableView相关的
崩溃报错
原因是xib上的labelMoney控件,没有和xib正确的关联
reason: '[<NSObject 0x1c00178c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key labelMoney.'
xib自定义组头和组尾UITableViewHeaderFooterView控件,如果是继承自UITableViewHeaderFooterView会出现莫名其妙的问题,目前还没有找到问题原因,所以最好还是继承自UIView
TableViewCell不显示的问题
- 检查是否设置了tableView的代理和数据源
- 检查行高和行数
- 检查注册cell的方法是否正确
UINib *nib = [UINib nibWithNibName:NSStringFromClass([cellClass class]) bundle:nil];
[self registerNib:nib forCellReuseIdentifier:NSStringFromClass([cellClass class])];
参考
https://blog.csdn.net/lining1041204250/article/details/81066667
Safe Area Layout Guide before iOS 9.0 报错
新建了一个控制器SFIMUploadIdCardViewController,又无意加了同名的自定义SFIMUploadIdCardView就会报错了
reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "SFIMUploadIdCardView" nib but the view outlet was not set
组件化配置xib文件
https://www.jianshu.com/p/f6fb84d3c35e
网友评论