对于iOS7,我使用UIButton titleLabel.frame.size.width属性来确定不同位置下按钮标题的宽度,以便可以在contentInset上使用UIButton正确放置标题。

我的UIButton设置有图像和标题,我一直希望将两者的组合水平放置在UIButton中,例如:

[space-x (image) space-y (titleLabel) space-x]

在iOS 7和Xcode 5.1下,以下代码可以完美运行(即使内置XCode 5.1,也可以在iOS 8 GM上运行):
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或space-y之间的点间距数)

在iOS 8和Xcode 6 GM下,button.titleLabel.frame.size返回的宽度和高度为零的CGSize,因此我的contentInset最终使UIImageUIButton中居中,导致titleLabel截断。

有任何想法吗?我尝试在此代码之前立即设置titleLabel文本,以防万一认为它为空,但这也无济于事。

提前致谢!

最佳答案

设置标题文本,然后为标题标签设置一个sizeToFit,并尝试获取titleLabel.frame.size.width

[myButton setTitle:@"My Title" forState:UIControlStateNormal];
[myButton.titleLabel sizeToFit];

关于ios - UIButton titleLabel框架大小返回CGSize,宽度和高度为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25758599/

10-11 20:01