UIButton竖直对齐无效。

6
我不明白为什么在以下代码中,标题对齐方式不能保持在顶部。
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;

enter image description here


字体必须是53号吗? - Peter Foti
4个回答

5
UIButton有一个非常巧妙的属性叫做"titleEdgeInsets",你可以使用它(通过UIEdgeInsetsMake)重新定位标题的上下边距,并使其在垂直方向上居中。

3
是的,我想我可能会用它...但你有任何想法为什么会发生这种情况吗?!我的意思是,真是见鬼了。 - Rizon

3
这种行为是由按钮的titleLabel的baselineAdjustment默认属性引起的。如果将其设置为UIBaselineAdjustmentNone,则应该获得您想要的效果。 btn2.titleLabel.baselineAdjustment = UIBaselineAdjustmentNone; 从UILabel的文档中docs

baselineAdjustment

Controls how text baselines are adjusted when text needs to shrink to fit in the label.

@property(nonatomic) UIBaselineAdjustment baselineAdjustment

Discussion

If the adjustsFontSizeToFitWidth property is set to YES, this property controls the behavior of the text baselines in situations where adjustment of the font size is required. The default value of this property is UIBaselineAdjustmentAlignBaselines. This property is effective only when the numberOfLines property is set to 1.

UIBaselineAdjustmentAlignBaselines

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

iOS 2.0及更高版本可用。

UIBaselineAdjustmentAlignCenters

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

iOS 2.0及更高版本可用。

UIBaselineAdjustmentNone

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

iOS 2.0及更高版本可用。

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


btn2.titleLabel?.baselineAdjustment = .alignCentersbtn2.titleLabel?.baselineAdjustment = .alignCenters - dimohamdy

0

我放弃了尝试以编程方式使其工作,只是将基线约束设置为另一个项目。在IB上似乎非常有效(内容对齐属性),即使在Stack View中也是如此,但在代码中它不起作用。


0

enter image description here

在storyboard中查看内容对齐方式 - 垂直


你如何以编程方式设置它?我已经在我的视图中完成了这个操作,但是一旦我重新加载tableview,它就会重置为垂直居中(虽然不是水平居中...) - Skwiggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接