2014-04-25 21 views
5

我试过是这样的: -的UIButton占用自己的大小自动布局

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。鬼的价值。

回答

6

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

使你们这样一个按钮,检查约束显示以下内容:

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。基本上这是按钮的最小尺寸,在没有其他的情况下。

这不是很清楚你想要什么或为什么你被这个困扰。更小的将是一个不好的触摸目标,无标签或图像的按钮将无法看到。如果添加更长的标题,按钮将变得更大。如果添加其他约束来强制特定尺寸,则这些将覆盖内在内容尺寸。

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

+0

啊,好吧,我的想法是正确的:-)很好的答案。 – Fogmeister

+0

嗯,好吧。听起来现在好了。但正如我在问题中提到的那样,“问题也是我想要简单地根据其内容减少按钮的宽度,而不给定任何固定宽度。”而对于默认内容大小,“30”似乎是一个点太大了,我只是不想让按钮出现。那会更好。 – esh

+0

@ BlackFlam3 Apple HIG指出按钮的最小触摸面积应为44x44点大小。 30对于一个按钮来说已经太小了,以至于无法轻松点击。进一步缩小其规模并不合理。 – Fogmeister

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)]; 
+0

几个百分点。 a)我使用'Autolayout'(无框架世界)。 b)'sizeWithFont'已弃用。需要为此使用'boundingRectWithSize'(将来的证明)。 – esh

+0

最后,我使用了自动布局的文本宽度。这只是苹果相关的东西。 – esh

+0

好的。这些方法与自动布局不太兼容,但如果我找到某些东西,我会尽快回复您。 – aksh1t

0

首先为故事板中的按钮尺寸定义一个约束。

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

之后,你可以将它的大小设置为这样的任何你想要的。

self.buttonSizeConst.constant = 65.0; 

enter image description here

编辑:有了这个方法,你需要计算你的按钮的宽度,但我觉得你并不想这样做。你需要为它的内容自动调整UIButton的大小。为此,您应该给出如下图所示的约束。当你改变你的标题时它会扩展到正确的位置。

enter image description here

+0

它的苹果相关的东西。想知道“30”是从哪里来的。我已经知道这个方法。 – esh

1

我想知道是否有一个uibutton的最小固有内容大小?

无论如何,尝试做...

[button invalidateIntrinsicContentSize]; 
+1

社区wiki?你完成收集代表然后呢? – jrturton

+0

咦?哦...我一定是错误地勾选了它。大声笑!当我回答时,在我的iPad上。 – Fogmeister

相关问题