Для iOS7 я использовал свойство UIButton titleLabel.frame.size.width для определения ширины названия моей кнопки в разных локализации, чтобы я мог правильно позиционировать заголовок, используя contentInset на UIButton.
My UIButton настроен с изображением и названием, и я всегда хочу, чтобы комбинация этих двух была горизонтально сосредоточена в UIButton, например:
[space-x (image) space-y (titleLabel) space-x]
В iOS 7 и Xcode 5.1 следующий код работает отлично (даже работает на iOS 8 GM при построении в XCode 5.1):
CGSize buttonSize = button.frame.size;
CGSize titleSize = button.titleLabel.frame.size;
float contentInset =((buttonSize.width - (titleSize.width + 18 + 3)) / 2 );
float contentInsetRounded = roundf(contentInset);
[button setContentEdgeInsets:(UIEdgeInsetsMake(0, contentInsetRounded, 0, 0))];
(18 - ширина изображения, а 3 - количество интервалов между изображением и titleLabel или пробел-y в моем примере выше)
В iOS 8 и Xcode 6 GM button.titleLabel.frame.size возвращает CGSize с нулевой шириной и высотой, поэтому мой ContentInset заканчивает центрирование UIImage в UIButton, заставляя titleLabel усекать.
Любые идеи? Я попытался установить текст titleLabel непосредственно перед этим кодом, если он считает, что он пуст, но это тоже не помогло.
Спасибо заранее!