1.drawRect 方法
初始化不走 在[self addSubView: ]才走,与单例 或者懒加载有冲突,没走一次[self addSubView: ],视图重新创建一次,造成内容复用,并且这也会影响collectionview的视图,造成collectionview布局错误
但是在封装视图时,初始化之后,然后传递的参数,可以通过这个方法修改,作为视图封装是非常好用的方法
所以使用时要注意情况
2.UIWindow的使用
防止重复创建,加载window上的视图,需要写成懒加载
3.collectionView使用遇到的问题
1)多组内容时中,当其中一个组的内容为空时,需要将其itemSize的尺寸设置为 CGSizeMake(screen_width,0.1);
2)collectionView系统没有提供类似于TableivewHeaderView,只有每组上方的headView,而且headview中的视图必须在collectionview初始化中注册
3)书写headerView和footer时,需要:
if (kind == UICollectionElementKindSectionHeader) {
UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView" forIndexPath:indexPath];
for (UIView *view in headerView.subviews) {
[view removeFromSuperview];
}
return headerView;
}else if (kind == UICollectionElementKindSectionFooter){
UICollectionReusableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footerView" forIndexPath:indexPath];
for (UIView *view in footerView.subviews) {
[view removeFromSuperview];
}
return footerView;
}else{
return nil;
}
此功能必须先判断条件,然后再去创建headerView和footerView,如果不这样做,在iOS 11以下的系统会Crash,在使用headerView和Footerview还需要做防止复用操作,
4.tableview使用遇到的问题
有多组内容时,为了能够准确获取组头的尺寸,需要实现每组的footer协议,并设置footer的高度设为0.01
5.状态栏空白不能占据的问题
if (@available(iOS 11.0, *)) {
UIScrollView.appearance.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
self.automaticallyAdjustsScrollViewInsets = NO;
}
注意内容:
以上方法需要写在根视图下,例如某个视图是在自定义tabbar下的一个模块,那么上述属性需要放在自定义的tabbar类中才可以使的自定义tabbar下的每一个模块使用上述属性