如何为UILabel添加滚动功能

43

在 Xcode 中,我创建了一个 UILabel,它根据我放置的文本行数自动调整大小。但是我不希望 UILabel 的高度超过一定的限制(在我的示例中为 240),代码如下:

NSString *text = @"imagine this is a huge wall of text\n\n\n"
UILabel *myLabel = [[UILabel alloc] init];
[myLabel setNumberOfLines:0];
CGSize labelSize = [text sizeWithFont:myLabel.font constrainedToSize:CGSizeMake(280, 240) lineBreakMode:myLabel.lineBreakMode];
myLabel.frame = CGRectMake(0, 0, 280, labelSize.height);

当我的文本在10-15行左右时,这个方法效果很好。 但是如果我放入大约40行的文本,额外的文本将超出我的UILabel并被裁剪。

我如何向myLabel添加滚动功能,以便myLabel仍然具有最大高度为240,并且我可以向下滚动来查看myLabel中多余的文本行?


也许这能帮到你:https://dev59.com/BnLYa4cB1Zd3GeqPbsg7#16860529 - Nishant
从26k个用户中查看了这个问题,只有19个点赞!! 奇怪!! - Amr Lotfy
2个回答

131

使用UITextView参考资料)。

它的设计就是用来实现这个功能。禁用编辑,你就获得了一个可滚动的标签。


5
请注意,UITextView并不能完全替代UILabel。举个例子(截至iOS 6),当你给带有属性文本的UILabel设置字体时,这个改变是“持久的”;而当你给UITextView设置字体时,这个改变只适用于UITextView上已经存在的属性文本 -- 如果你分配一个新的属性字符串,之前设置的字体将不会被反映。(至少在我今晚使用它时是这样的。) - Jon Schneider
1
@JonSchneider UITextView今天仍然是“正确”的选择吗? - kemicofa ghost
@rugdealer,恐怕我不能立即给你一个确定的答案;自2014年末以来,我就没有进行过严肃的iOS开发了。 - Jon Schneider

1
你可以像这样在UIScrollView上添加你的UILabel,也可以像这样做---
scrollView.backgroundColor = [UIColor clearColor];

        UILabel * label = [[UILabel alloc] init];
        [label setNumberOfLines:0];
        label.text=[detailDict valueForKey:@"ABC"];
        [label setFont:[UIFont fontWithName:@"Georgia" size:16.0]];
        CGSize labelsize=[label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(250, 1000.0) lineBreakMode:UILineBreakModeWordWrap];
        int y=0;
        label.frame=CGRectMake(38, y, 245, labelsize.height);
        [label setBackgroundColor:[UIColor clearColor]];
        [label setTextColor:[UIColor whiteColor]];
        scrollView.showsVerticalScrollIndicator = NO;
        y+=labelsize.height;
        [scrollView setContentSize:CGSizeMake(200,y+50)];
        [scrollView addSubview:label];
        [label release];

这里使用Y来增加或减小标签大小以适应文本。


3
如果你有更好的选择,那么采取某种行动总是错误的方式。 :( - Munim
1
这实际上是一个非常好的解决方案,适用于那些已经厌倦了UITextView滚动行为中不断增加的问题,特别是当与透明导航栏混合使用时。有时它可以滚动,有时却不能。这个解决方案可以在UITextView无法使用的地方发挥作用。-rrh - Richie Hyatt

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