2015-06-30 117 views
0

我在界面生成器中創建的自定義UITableViewCell中有一個UIButton,高度和寬度由Autolayout約束定義。在自定義UITableViewCell中使用Autolayout獲取UIButton的大小

我需要在自動佈局定義最終大小後獲取UIButton的大小。

UITableViewCell with Autolayout

我曾嘗試:

在我的自定義的UITableViewCell

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    NSLog(@"%f", self.infoButton.bounds.size.width); 

    self.infoButton.layer.cornerRadius = self.infoButton.bounds.size.width/2; 
    self.infoButton.clipsToBounds  = YES; 
    self.infoButton.layer.borderColor = [UIColor whiteColor].CGColor; 
    self.infoButton.layer.borderWidth = 4.0f; 
} 

的問題是,我有不同的價值觀:

2015-06-30 03:01:47.578 MYPROJ[3596:34092] 48.000000 
2015-06-30 03:01:47.581 MYPROJ[3596:34092] 48.000000 
2015-06-30 03:01:47.583 MYPROJ[3596:34092] 48.000000 
2015-06-30 03:01:47.585 MYPROJ[3596:34092] 56.000000 
2015-06-30 03:01:47.586 MYPROJ[3596:34092] 56.000000 
2015-06-30 03:01:47.586 MYPROJ[3596:34092] 56.000000 
2015-06-30 03:01:53.482 MYPROJ[3596:34092] 48.000000 
2015-06-30 03:01:53.484 MYPROJ[3596:34092] 56.000000 
2015-06-30 03:01:54.939 MYPROJ[3596:34092] 56.000000 
2015-06-30 03:02:04.161 MYPROJ[3596:34092] 56.000000 
2015-06-30 03:02:05.115 MYPROJ[3596:34092] 56.000000 
2015-06-30 03:02:05.957 MYPROJ[3596:34092] 56.000000 

我也有嘗試了代碼insid Ë- (void)awakeFromNib我都嘗試self.infoButton.bounds.size.widthself.infoButton.frame.size.width

,這讓我自動佈局前的靜態寬度是在我的案件48.0 此外

恐怕把裏面的代碼- (void)layoutSubviews的解決方案可能會影響性能,因爲它會被稱爲用戶每次滾動和應用層轉換的一切,有沒有更好的解決方案?

+0

現在更新了答案。 –

+0

我已經嘗試過'self.infoButton.frame.size.width' bt在自動佈局之前它總是給出尺寸 – Aladin

+0

您能提供用於單元格按鈕的水平約束嗎?這將有所幫助.. – Tejvansh

回答

1

在您的自定義UITableViewCell.m文件中,在您的awakeFromNib方法中添加以下行。

在這裏,因爲你的按鈕依賴於單元格,而且它確實與設備的屏幕具有相同的寬度。

- (void)awakeFromNib { 
// Initialization code 
self.infoButton.layer.cornerRadius = [UIScreen mainScreen].bounds.size.width * 0.075f; // 0.15/2 = 0.075f (Half of the button's width) 
self.infoButton.clipsToBounds  = YES; 
self.infoButton.layer.borderColor = [UIColor whiteColor].CGColor; 
self.infoButton.layer.borderWidth = 4.0f; 
} 

希望它可以幫助...

+0

它的工作原理,謝謝,但我想我不必改變UIButton的約束。你能解釋爲什麼'* 0.075f;' – Aladin

+0

我已經在其中添加了評論以幫助你理解。如果答案對你有幫助,請將其標記爲正確並且upvote,以便其他人可以知道它.. – Tejvansh

+0

謝謝,我已經忘記了我需要寬度的一半;) – Aladin

0

嘗試訪問您的按鈕的內在內容的大小。

CGSize buttonSize = self.infoButton.intrinsicContentSize;

+0

我已經試過這個,但它不起作用,它顯示'awakeFromNib'和'layoutSubviews'中的錯誤值 – Aladin

相關問題