隨手記幾個最近碰到的小問題
tips:如果有錯誤,或者有更好的詳細(xì)解答,請隨時聯(lián)系我進(jìn)行修改
1.iOS11NSCFDictionary與__NSCFDictionary關(guān)系變化
在iOS11上空民,NSCFDictionary變成了__NSCFDictioanry的子類
如下測試:
iOS11:
iOS10:
這邊可以看到NSCFDictionary的superclass妹沙,從NSMutableDictionary變成了__NSCFDictionary
2.Method Swizzling父子類問題
碰到一個crash膘壶,最后找出來原因,就是父子類的Method Swizzling問題果覆。子類沒有實現(xiàn)該方法,導(dǎo)致hook到了父類方法殖熟,出現(xiàn)crash局待。這邊有一篇不錯的文章,就是講這個的菱属,記錄一下:
Objective-C Method Swizzling
3.UITableViewCell點擊時候子view背景色消失問題
UITableViewCell上面如果subView有背景色的時候钳榨,點擊UITableView,subView的背景色會消失纽门。
原因是點擊后會觸發(fā)Cell的setSelected:
與setHighlighted:
方法薛耻,里面會設(shè)置子view的setBackgroundColor:
方法,將顏色設(shè)置為空赏陵。
解決方案:
1.重寫Cell的setSelected:
與setHighlighted:
方法饼齿,在其中將子view的背景色重新設(shè)一遍
2.重寫子view的
- (void)setBackgroundColor:(UIColor *)backgroundColor {
return;
}
方法饲漾,阻斷背景色的修改,然后在view的layer上面設(shè)置初始的背景色缕溉。
4.圓角與陰影并存問題
有的時候要寫圓角與陰影同時存在的情況考传,就可以CALayer加上shadowPath的方法。
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:unitView.bounds cornerRadius:radius];
CALayer *shadowLayer = [CALayer layer];
shadowLayer.shadowPath = maskPath.CGPath;
shadowLayer.frame = unitView.frame;
shadowLayer.shadowRadius = shadowOffset;
shadowLayer.shadowColor = [UIColor blackColor].CGColor;
shadowLayer.shadowOffset = CGSizeMake(shadowOffset, shadowOffset);
shadowLayer.shadowOpacity = 0.1;
[self.contentView.layer insertSublayer:shadowLayer below:unitView.layer];
參考連接
無