对于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最终使UIImage
在UIButton
中居中,导致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/