UIButton垂直对齐不起作用

Posted

技术标签:

【中文标题】UIButton垂直对齐不起作用【英文标题】:UIButton vertical alignment doesn't work 【发布时间】:2013-08-18 22:57:22 【问题描述】:

我不明白为什么在下面的代码中,标题对齐不保持顶部。

UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn2.titleLabel.font = [UIFont systemFontOfSize:53];
btn2.frame = CGRectMake(20, 20, 270, 44);
[btn2 setTitle:@"test1 test2 test3 test4 test5 test6 test7" forState:UIControlStateNormal];
[btn2 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
btn2.titleLabel.minimumFontSize = 1.0;
btn2.titleLabel.adjustsFontSizeToFitWidth = YES;
btn2.titleLabel.numberOfLines = 1;
btn2.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;

【问题讨论】:

字体必须是 53 号吗? 【参考方案1】:

UIButton 有一个名为"titleEdgeInsets" 的非常漂亮的属性,您可以使用它(通过UIEdgeInsetsMake 重新定位标题的顶部和底部边距,并使事物垂直居中。

【讨论】:

是的,我想我可能会使用它......但你知道为什么会这样吗?!我的意思是,wtf。【参考方案2】:

此行为是由于按钮的titleLabelbaselineAdjustment 默认属性所致。如果你把它设置为UIBaselineAdjustmentNone,你应该会得到你想要的效果。

btn2.titleLabel.baselineAdjustment = UIBaselineAdjustmentNone;

从docs 到UILabel

基线调整

控制文本时如何调整文本基线 需要缩小以适合标签。

@property(nonatomic) UIBaselineAdjustment baselineAdjustment

讨论

如果adjustsFontSizeToFitWidth 属性设置为YES,则在需要调整字体大小的情况下,此属性控制文本基线的行为。此属性的默认值为UIBaselineAdjustmentAlignBaselines。该属性仅在numberOfLines属性设置为1时有效。

UIBaselineAdjustmentAlignBaselines

相对于基线位置调整文本。

适用于 ios 2.0 及更高版本。

UIBaselineAdjustmentAlignCenters

相对于边界框的中心调整文本。

适用于 iOS 2.0 及更高版本。

UIBaselineAdjustmentNone

相对于边界框的左上角调整文本。这是默认调整。

适用于 iOS 2.0 及更高版本。

请注意,UILabel 的默认调整不同于按钮的titleLabel

【讨论】:

btn2.titleLabel?.baselineAdjustment = .alignCenters【参考方案3】:

看看 Storyboard 中的 Content-Alignment Vertical

【讨论】:

如何以编程方式设置?我已经在我的视图中做到了,但是一旦我重新加载表格视图,它就会重置为垂直中心(虽然不是水平中心......)?【参考方案4】:

我放弃了尝试让它以编程方式工作,只是为另一个项目设置了基线约束。它似乎在 IB(内容对齐属性)上工作得很好,即使在堆栈视图中也是如此,但在代码中它不起作用。

【讨论】:

以上是关于UIButton垂直对齐不起作用的主要内容,如果未能解决你的问题,请参考以下文章

垂直对齐:底部不起作用

引导垂直对齐属性不起作用

为啥垂直对齐:中间;在这段代码中不起作用? [复制]

GridLayout中的Nativescript垂直对齐不起作用

div表格单元格垂直对齐不起作用

嵌套文本,垂直对齐不起作用 - React Native