注册
登录
IOS
将文本垂直对齐到UILabel中的顶部
返回
将文本垂直对齐到UILabel中的顶部
作者:
狗头军师
发布时间:
2024-02-16 01:32:25 (1月前)
我有UILabel两行文字的空格。有时,当文本太短时,该文本会显示在标签的垂直中心。
如何垂直对齐文本以使其始终位于顶部UILabel?
表示带有垂直居中文本的UILabel的图像
收藏
举报
2 条回复
1#
回复此人
v-star*위위
|
2020-08-12 09-44
无法在上设置垂直对齐UILabel,但是您可以通过更改标签的框来获得相同的效果。我将标签设为橙色,以便您可以清楚地看到发生了什么。 这是执行此操作的快速简便的方法: ` [myLabel sizeToFit];` sizeToFit挤压标签 如果您有一个带有较长文本的标签,该标签将包含多行,请设置numberOfLines为0(此处为零表示行数不受限制)。 ``` myLabel.numberOfLines = 0; [myLabel sizeToFit]; ``` 带有sizeToFit的较长标签文本 较长的版本 我将在代码中添加标签,以便您了解发生了什么。您也可以在Interface Builder中设置大多数功能。我的设置是一个基于视图的应用程序,带有在Photoshop中制作的背景图像以显示边距(20点)。标签是吸引人的橙色,因此您可以看到尺寸的变化。 ``` - (void)viewDidLoad { [super viewDidLoad]; // 20 point top and left margin. Sized to leave 20 pt at right. CGRect labelFrame = CGRectMake(20, 20, 280, 150); UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame]; [myLabel setBackgroundColor:[UIColor orangeColor]]; NSString *labelText = @"I am the very model of a modern Major-General, I've information vegetable, animal, and mineral"; [myLabel setText:labelText]; // Tell the label to use an unlimited number of lines [myLabel setNumberOfLines:0]; [myLabel sizeToFit]; [self.view addSubview:myLabel]; } ``` sizeToFit居中对齐或右对齐文本会影响使用的一些限制。这是发生了什么: ``` // myLabel.textAlignment = NSTextAlignmentRight; myLabel.textAlignment = NSTextAlignmentCenter; [myLabel setNumberOfLines:0]; [myLabel sizeToFit]; ``` 在此处输入图片说明 标签的大小仍带有固定的左上角。您可以将原始标签的宽度保存在一个变量中,然后将其设置为sizeToFit,或者给它固定的宽度以解决这些问题: ``` myLabel.textAlignment = NSTextAlignmentCenter; [myLabel setNumberOfLines:0]; [myLabel sizeToFit]; CGRect myFrame = myLabel.frame; // Resize the frame's width to 280 (320 - margins) // width could also be myOriginalLabelFrame.size.width myFrame = CGRectMake(myFrame.origin.x, myFrame.origin.y, 280, myFrame.size.height); myLabel.frame = myFrame; ``` 标签对齐 请注意,这sizeToFit将遵循您初始标签的最小宽度。如果您以宽度为100的标签开始并对其进行调用sizeToFit,它将返回宽度为100(或更小)的(可能非常高)标签。您可能需要在调整大小之前将标签设置为所需的最小宽度。 通过调整框架宽度来校正标签对齐 其他注意事项: 是否lineBreakMode受到尊重取决于其设置方式。NSLineBreakByTruncatingTail(默认值)在之后被忽略sizeToFit,其他两种截断模式(头和中间)也被忽略。NSLineBreakByClipping也被忽略。NSLineBreakByCharWrapping照常工作。框架宽度仍然变窄以适合最右边的字母。 马克·阿默里(Mark Amery)在评论中使用“自动布局”修复了NIB和Storyboard。 如果您的标签作为view使用自动布局的ViewController 的子视图包含在笔尖或情节提要中,则无法进行sizeToFit调用viewDidLoad,因为自动布局的大小和放置子视图的位置viewDidLoad会被调用,并会立即撤消您的效果sizeToFit呼叫。但是,sizeToFit从内部进行呼叫viewDidLayoutSubviews 将起作用。 我的原始答案(供后代参考): 这使用该NSString方法sizeWithFont:constrainedToSize:lineBreakMode:计算适合字符串的框架高度,然后设置原点和宽度。 使用您要插入的文本调整标签框架的大小。这样,您可以容纳任意数量的行。 ``` CGSize maximumSize = CGSizeMake(300, 9999); NSString *dateString = @"The date today is January 1st, 1999"; UIFont *dateFont = [UIFont fontWithName:@"Helvetica" size:14]; CGSize dateStringSize = [dateString sizeWithFont:dateFont constrainedToSize:maximumSize lineBreakMode:self.dateLabel.lineBreakMode]; CGRect dateFrame = CGRectMake(10, 10, 300, dateStringSize.height); self.dateLabel.frame = dateFrame; ```
编辑
登录
后才能参与评论