iOS 重寫cell的Frame

weixin_33670713發表於2017-07-17

在iOS開發中,我們會遇到各種各樣的需求,例如cell圓切角、陰影偏移等效果,這時我們可以通過重寫cell的setFrame方法來達到我們的目的;
方法一:在自定義cell類.m檔案中新增如下程式碼:

// 重寫setFrame方法,為Cell新增陰影偏移
- (void)setFrame:(CGRect)frame
{
    static CGFloat margin = 15;
    frame.size.height -=margin;
    //陰影偏移效果 - wsx註釋
    self.layer.shadowColor = [UIColor lightGrayColor].CGColor;
    self.layer.shadowOffset = CGSizeMake(4, 4);
    self.layer.shadowOpacity = 0.8f;
    [super setFrame:frame];
}

方法二:在自定義cell類.m檔案中,程式碼設定各控制元件frame的地方,新增如下程式碼:

/**
  * 在此重設frame,代替setFrame方法,可規避一些問題   - wsx註釋
  */
        {
            static CGFloat margin = 15;
            CGRect frame = self.frame;
            frame.size.height -=margin;
            //陰影偏移效果 - wsx註釋
            self.layer.shadowColor = [UIColor lightGrayColor].CGColor;
            self.layer.shadowOffset = CGSizeMake(4, 4);
            self.layer.shadowOpacity = 0.8f;
            [super setFrame:frame];
        }

特別注意,self.frame.size 和 self.frame.origin 是隻讀的,要修改其值,必須建立一箇中間變數CGRect frame來接收self.frame的值,再對frame進行改變,最後self.frame = frame將修改後的值賦值回去;

相關文章