有没有一种方法可以使UILabel“顶部对齐”,即使文本粘在标签视图的顶部?与默认的垂直居中对齐或漂浮在视图的中心相反。
这是三个标签的图像,左对齐、右对齐和居中对齐,以及一个UITextView,它是居中和顶部对齐的。无论视图的垂直大小如何,textView的文本都会粘在顶部。我能用标签做同样的事情吗?
有没有一种方法可以使UILabel“顶部对齐”,即使文本粘在标签视图的顶部?与默认的垂直居中对齐或漂浮在视图的中心相反。
这是三个标签的图像,左对齐、右对齐和居中对齐,以及一个UITextView,它是居中和顶部对齐的。无论视图的垂直大小如何,textView的文本都会粘在顶部。我能用标签做同样的事情吗?
有一个解决方法:
UILabel
设置高度和宽度 约束(constraint)
,常量必须小于或等于您想要的最大高度 | 宽度。行数(number of lines)
设置为零。storyboard
中将高度设置为仅适合一行。UILabel
的文本后,在您的代码中调用 sizeToFit
。这将使您的 UILabel
在您想要的最大宽度和高度之间重新调整大小,文本始终保持顶部对齐。
UICollectionViewCell
时遇到了这个问题。常规的 sizeToFit
方法无法正常工作。您提出的自动布局建议在这种情况下起了作用。谢谢! - Mark Suman- (void)setUILabelTextWithVerticalAlignTop:(NSString *)theText {
CGSize labelSize = CGSizeMake(250, 300);
CGSize theStringSize = [theText sizeWithFont:targetLabel.font constrainedToSize:labelSize lineBreakMode:targetLabel.lineBreakMode];
targetLabel.frame = CGRectMake(targetLabel.frame.origin.x, targetLabel.frame.origin.y, theStringSize.width, theStringSize.height);
targetLabel.text = theText;
}
//linked to a button that sets the text from a UITextView to the label.
- (IBAction)setText:(id)sender {
[sourceText resignFirstResponder];
[self setUILabelTextWithVerticalAlignTop:sourceText.text];
[targetLabel setNumberOfLines:0];
[targetLabel sizeToFit];
}
这是项目:
[iconLabel setText:icon];
[iconLabel setNumberOfLines:1];
[iconLabel sizeToFit];
return iconLabel;`
- BuguiBuUILabel
的垂直对齐方式。相反,您将需要使用NSString
提供的sizeWithFont
方法之一。使用哪个取决于您是否需要多行或单行标签。对于单行标签可以使用sizeWithFont:forWidth:lineBreakMode:
,而对于多行标签可以使用sizeWithFont:constrainedToSize:lineBreakMode:
。您可以轻松地使用相关标签的font
属性加载字体参数。您可以在这里查看有关使用这些函数的更多详细信息。CGSize
结构体,其中包含基于NSString
文本的标签的最小大小。一旦您获得了标签的正确尺寸,您就可以轻松地将其放置在父视图的顶部,并且它将出现为顶部对齐。我已经用UITextView替换了UILabel,因为在UITextView中,文本会粘附在顶部。
只是一个建议,可能对某些人有用。
@property (nonatomic, assign) UIControlContentVerticalAlignment verticalAlignment;
.m文件
- (void) drawTextInRect:(CGRect)rect
{
if(_verticalAlignment == UIControlContentVerticalAlignmentTop || _verticalAlignment == UIControlContentVerticalAlignmentBottom)
{
// If one line, we can just use the lineHeight, faster than querying sizeThatFits
const CGFloat height = floorf(((self.numberOfLines == 1) ? ceilf(self.font.lineHeight) : [self sizeThatFits:self.frame.size].height));
rect.origin.y = floorf(((self.frame.size.height - height) / 2.0f) * ((_verticalAlignment == UIControlContentVerticalAlignmentTop) ? -1.0f : 1.0f));
}
[super drawTextInRect:rect];
}
- (void) setVerticalAlignment:(UIControlContentVerticalAlignment)newVerticalAlignment
{
_verticalAlignment = newVerticalAlignment;
[self setNeedsDisplay];
}
我用这个来进行垂直对齐。
collectionviewCell
上,我想让我的标签包含我设置的文本并顶部对齐,所以我找到了一个解决方法,就是先取一个,将其高度和宽度设置为collectionview
的contentview
的高度和宽度,然后将我的imageview
和标签添加到中。我设置了图像视图的高度和宽度,对于标签,我只给了尾随、前导和顶部。