UILabel簡單高效實現圓角的方式

yuzhiwen12 7年前發布 | 16K 次閱讀 Java iOS開發 移動開發

需求

我們會經常遇到這樣一個需求,給TableViewCell添加標簽,例如:餓了么App中店鋪會有,減、特、新等標簽,這些標簽一般都是用UILabel控件實現,UILabel中設置text,textColor,backgroundColor,以及cornerRadius。

餓了么示例.PNG

問題

這個需求要求我們做圓角,業界也有很多做圓角的方式,最簡單的就是設置label.layer.cornerRadius = 2; label.layer.masksToBounds = YES; 但是這樣做(label.layer.cornerRadius > 0 && label.layer.masksToBounds = YES)會出現離屏渲染,對于頁面中只有少量需要做圓角,也不會造成卡頓,但是如果是每個TableViewCell設置一些圓角,就會使列表滑動起來有明顯卡頓。

解決方法

業界對于圓角優化很多方式,大家可以搜一下相關文章。本文只針對UILabel的cornerRadius方式進行講解。先說一下cornerRadius屬性,它是影響layer顯示的backgroundColor和border,對layer的contents不起作用。

  • 對于不需要設置label的backgroundColor,只設置borderWidth、borderColor的label,直接設置cornerRadius,不需要設置masksToBounds = YES,就可以實現圓角功能。
  • 對于需要同時設置label的backgroundColor時,直接設置cornerRadius是不能正常顯示圓角的,原因是:UILabel設置backgroundColor的行為,不再是設定layer的背景色而是為contents設置背景色。所以解決方式是我們不去設置label的backgroundColor,而是直接設置label.layer.backgroundColor,這樣就可以實現單獨設置cornerRadius,顯示圓角的效果。代碼:
    UILabel *tagLabel = [UILabel new];
    tagLabel.text = @"減";
    tagLabel.textColor = [UIColor whiteColor];
    tagLabel.font = [UIFont systemFontOfSize:12];
    tagLabel.layer.backgroundColor = [UIColor greenColor].CGColor;
    tagLabel.layer.cornerRadius = 2;

 

 

來自:http://www.jianshu.com/p/f8f9bc255d79

 本文由用戶 yuzhiwen12 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!