2015-06-30 3 views
0

У меня есть UIButton внутри пользовательского UITableViewCell, созданного в Interface Builder, высота и ширина определяются ограничениями Autolayout.Получите размер UIButton внутри пользовательского UITableViewCell с Autolayout

Мне нужно получить размер 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.width и self.infoButton.frame.size.width

и это дает мне статическую ширину до Autolayout, который в моем случае 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

Я добавил в него комментарий, чтобы помочь вам понять. Если ответ вам помог, отметьте как правильно и вверх, так что другие могут это знать. – Tejvansh

+0

Спасибо, я забыл что мне нужна половина ширины;) – Aladin

0

Попробуйте получить доступ к внутреннему контенту размера вашей кнопки.

CGSize buttonSize = self.infoButton.intrinsicContentSize;

+0

Я уже пробовал это, но он не работает, он показывает неправильные значения как в 'awakeFromNib', так и' layoutSubviews' – Aladin

Смежные вопросы