我以编程方式创建了一个UIButton 。我希望调用sizeToFit
来调整标题大小(和字体)的大小。但它显示了一个插图,可以看到标题上方和下方的灰色区域。
所有插入值显示为0.0(因为它们应该使用UIEdgeInsetsZero初始化)
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitle:@"Tap Me" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
btn.backgroundColor = [UIColor darkGrayColor];
btn.titleLabel.backgroundColor = [UIColor blueColor];
[btn sizeToFit]; // Resize will set the width and height
[self.view addSubview:btn];
NSLog(@"%.2f %.2f %.2f", btn.imageEdgeInsets.top, btn.contentEdgeInsets.top, btn.titleEdgeInsets.top);
// Previous statement output :
// ... Sandbox[1764:59117] 0.00 0.00 0.00
}
我确定我错过了什么。我在哪里可以找到这些插入值?
(这是iOS 8.3)
更新sizeToFit
有些评论让我更具体:我知道contentEdgeInsets
的默认值是UIEdgeInsetsZero,如Apple文档中所述。我的帖子表明,不知何故,应用了不同的值。
我测试了两个"空" UIButton控制:
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.backgroundColor = [UIColor darkGrayColor];
[btn sizeToFit];
[self.view addSubview:btn];
UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeSystem];
btn2.backgroundColor = [UIColor purpleColor];
[btn2 sizeToFit];
[self.view addSubview:btn2];
// Put some code next to move centers to display buttons properly
// ...
sizeToFit
后的控件大小为30x34 某些内部逻辑会调整大小,我无法找到此值的来源。它没有反映在contentEdgeInsets中。
答案 0 :(得分:0)
它在按钮周围增加了一些额外的间距
试试这个
btn.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
btn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
它将删除插入内容。
希望它有所帮助。
答案 1 :(得分:0)
imageEdgeInsets,contentEdgeInsets,titleEdgeInsets的默认值为UIEdgeInsetsZero。
请使用以下代码:
self.view.backgroundColor = [UIColor lightGrayColor];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitle:@"Tap Me" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
btn.backgroundColor = [UIColor darkGrayColor];
btn.titleLabel.backgroundColor = [UIColor blueColor];
[btn sizeToFit]; // Resize will set the width and height
NSLog(@"%.2f %.2f %.2f", btn.imageEdgeInsets.top, btn.contentEdgeInsets.top, btn.titleEdgeInsets.top);
// Previous statement output :
// ... Sandbox[1764:59117] 0.00 0.00 0.00
btn.contentEdgeInsets = UIEdgeInsetsMake( 10.0, 0.0, 0.0, 0.0);
[self.view addSubview:btn];
NSLog(@"%.2f %.2f %.2f", btn.imageEdgeInsets.top, btn.contentEdgeInsets.top, btn.titleEdgeInsets.top);
// Previous statement output :
// 0.00 10.00 0.00
答案 2 :(得分:0)
这是一个错误(21437476)并且已修复:
Apple Developer Relations 2015年9月16日09:51 PM 我们认为这个问题已得到解决。请通过iOS 9 GM(版本号:13A344)验证此问题,并在http://bugreport.apple.com/更新您的错误报告并附上结果。
iOS 9 GM(版本:13A344) https://developer.apple.com/ios/download/
发布日期:2015年9月16日
它也在Open Radar上。