UIButton占据了自己的尺寸Autolayout

时间:2014-04-25 06:20:47

标签: ios uibutton autolayout

我试过的是: -

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[self.view addSubview:btn];
btn.translatesAutoresizingMaskIntoConstraints = NO;
[btn addTarget:self action:@selector(bringUpNextViewController:) 
                    forControlEvents:UIControlEventTouchUpInside];
btn.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:14];
[btn setTitle:@"8" forState:UIControlStateNormal];
[self.view layoutIfNeeded];

NSLog(@"button size : %@", NSStringFromCGSize(btn.frame.size));

作为输出,我明白了:

button size : {30, 29}

然后我没有给setTitle字符串。按钮宽度仍为30.

那为什么总是这样呢?

我还尝试过high compression resistance priorityhigh content hugging priority。不会缩小到任何东西。

问题还在于我想简单地根据其内容减小按钮的宽度,而不给出任何固定的宽度。

我可以获取文本的宽度并为按钮指定宽度,但如果按钮占用内容宽度,我也不需要这样做。

编辑:

它不是导致宽度为30的插图。幽灵价值。

4 个答案:

答案 0 :(得分:7)

按钮由多个子视图组成。按钮的内部布局很可能在标签和按钮视图本身之间有一些默认填充。

制作与您类似的按钮并检查约束条件显示以下内容:

button constraints (
"<NSContentSizeLayoutConstraint:0x8c40a60 H:[UIButton:0x8f29840(30)] Hug:250 CompressionResistance:750>",
"<NSContentSizeLayoutConstraint:0x8c55280 V:[UIButton:0x8f29840(29)] Hug:250 CompressionResistance:750>"
)

30和29与您看到的尺寸值相关联。按钮的内在内容大小属性也返回30,29。基本上这是按钮的最小尺寸,没有其他任何东西。

目前还不太清楚你想要什么,或者为什么你会被这个困扰。任何较小的东西都将是一个糟糕的触摸目标,无论如何,没有标签或图像的按钮将是不可见的。如果添加更长的标题,按钮将变大。如果添加其他约束以强制特定大小,则这些将覆盖内在内容大小。

如果您希望按钮在没有标题时变为不可见,那么您应该明确隐藏它。这使得您在代码中的意图更加清晰,并且可以防止用户意外地点击他们无法看到的按钮。

答案 1 :(得分:1)

我想知道uibutton是否有最低内在内容大小?

无论如何,试着做......

[button invalidateIntrinsicContentSize];

答案 2 :(得分:0)

你试过[button sizeToFit];吗?

对于自定义按钮,我认为您需要覆盖:

- (CGSize)sizeThatFits:(CGSize)size;

最后,如果没有其他工作,你总是可以尝试从文本大小给出按钮宽度,如此

CGSize textsize = [yourText sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:14]]; 
[button setFrame:CGRectMake(0,0,textsize.width, textsize.height)];

答案 3 :(得分:0)

首先在故事板中定义按钮大小的约束。

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *buttonSizeConst;

之后你可以将它的大小设置为你想要的任何东西。

self.buttonSizeConst.constant = 65.0;

enter image description here

编辑:使用此方法,您需要计算按钮宽度,但我认为您不想这样做。您需要为其内容自动调整UIButton。为此,您应该给出如下图所示的约束。当你改变你的头衔时,它会扩展到右边。

enter image description here