UIButton插入背后的逻辑(sizeToFit)

时间:2015-06-17 08:35:59

标签: objective-c ios8 uibutton

我以编程方式创建了一个UIButton 。我希望调用sizeToFit来调整标题大小(和字体)的大小。但它显示了一个插图,可以看到标题上方和下方的灰色区域。

UIButton

所有插入值显示为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
// ...

enter image description here

  • UIButtonTypeCustom(上面的灰色背景):调用sizeToFit后的控件大小为30x34
  • UIButtonTypeSystem(紫色背景):30x30

某些内部逻辑会调整大小,我无法找到值的来源。它没有反映在contentEdgeInsets中。

3 个答案:

答案 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上。