2016-10-28 58 views
0

我正在使用layoutIfNeededUITableViewCell中執行一些視圖設置。例如: -layoutIfNeeded在iOS10上調用,但不在iOS9上

override func layoutIfNeeded() { 
    super.layoutIfNeeded() 
    let rescueButtonCornerLayer = CAShapeLayer() 
    let rescueButtonRoundedCornersPath = UIBezierPath(roundedRect: rescueNowButton.bounds, byRoundingCorners: [UIRectCorner.bottomLeft, UIRectCorner.bottomRight], cornerRadii: CGSize(width: MyTheme.cornerRadius, height: MyTheme.cornerRadius)) 
    rescueButtonCornerLayer.path = rescueButtonRoundedCornersPath.cgPath 
    rescueNowButton.layer.mask = rescueButtonCornerLayer 
} 

這iOS10工作正常,但是我注意到layoutIfNeeded不叫在iOS9了!爲什麼是這樣?我能做些什麼來解決它,或者我應該在哪裏放置這個設置代碼?

回答

1

你的佈局代碼應該在layoutSubviews,這將被自動調用。您也可以撥打setNeedsLayout和/或layoutIfNeeded來觸發佈局,但不應該依賴其他人所調用的任何一種佈局。

+0

將上面的代碼移動到'layoutSubviews',它確實在iOS9和iOS10上調用。然而,按鈕的角落根本不是四捨五入的。如果放置在'layoutIfNeeded'中,它們只會舍入。任何想法爲什麼? – KexAri

+0

@KexAri您是否檢查過在layoutSubviews中設置的界限,以及之後的視圖層次?你在調用'super.layoutSubviews()'嗎?你有沒有嘗試把自己的代碼放在'super'調用的另一端(之前和之後)? – Arkku

相關問題