[英]UIButton takes up its own size 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 priority
和high content hugging priority
。 不缩减为零。
问题还在于我想简单地根据其内容减小按钮的宽度,而不给出任何固定的宽度。
我可以获取文本的宽度并给按钮宽度,但如果按钮占用内容宽度,我不应该这样做。
编辑:
它不是导致宽度为30
的插入物。 幽灵的价值。
按钮由多个子视图组成。 按钮的内部布局很可能在标签和按钮视图本身之间有一些默认填充。
制作像您这样的按钮并检查约束显示以下内容:
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。 基本上这是按钮的最小尺寸,没有任何其他东西。
目前还不是很清楚你想要什么,或者为什么你会为此烦恼。 任何较小的东西都将是一个糟糕的触摸目标,无论如何,没有标签或图像的按钮将是不可见的。 如果添加更长的标题,按钮将变大。 如果添加其他约束以强制特定大小,则这些将覆盖内在内容大小。
如果你希望按钮在没有标题时变得不可见,那么你应该明确地隐藏它。 这使得您在代码中的意图更加清晰,并且可以防止用户意外地点击他们无法看到的按钮。
我想知道uibutton是否有最小的内在内容大小?
无论如何,试着做...
[button invalidateIntrinsicContentSize];
你试过[button sizeToFit];
?
对于自定义按钮,我认为您需要覆盖:
- (CGSize)sizeThatFits:(CGSize)size;
最后,如果没有其他工作,你总是可以尝试从文本大小给出按钮宽度,如此
CGSize textsize = [yourText sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:14]];
[button setFrame:CGRectMake(0,0,textsize.width, textsize.height)];
首先在故事板中定义按钮大小的约束。
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *buttonSizeConst;
之后,你可以将它的大小设置为你想要的任何东西。
self.buttonSizeConst.constant = 65.0;
编辑:使用此方法,您需要计算您的按钮宽度,但我认为您不想这样做。 您需要为其内容自动调整UIButton。 为此,您应该给出如下图所示的约束。 当您更改标题时,它将扩展到右侧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.