首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Xcode中显示不同大小的文本块

在Xcode中显示不同大小的文本块
EN

Stack Overflow用户
提问于 2014-02-22 19:29:34
回答 2查看 369关注 0票数 0

我正在创建一个问卷调查应用程序。在视图控制器中,我有一个问题作为标签显示,然后下面有三个答案也显示为标签。问题是,如果问题有多行,它无论如何都会显示在一行中,如果我拉伸标签,它就会与答案重叠。

什么是正确的方式来显示问题,以使答案只出现在问题的下面,不管问题有多长?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-22 20:19:18

尝试为您的问题标签将属性numberOfLines设置为0,它将允许显示无限行数。然后使用iOS 7方法boundingRectWithSize:options:context:计算文本大小。

代码语言:javascript
复制
CGRect questionFrame = self.questionLabel.frame
CGFloat maxWidth = questionFrame.size.width;

NSString *questionText = [NSString stringWithString:@"lorem ipsum"]; // your text
UIFont *font = self.questionLabel.font; // your label font

// Temporary attributed string
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:questionText attributes:@{ NSFontAttributeName: font }];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){ maxWidth, CGFLOAT_MAX }
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];

// Assign the new height
questionFrame.size.height = rect.size.height;
self.questionLabel.frame = questionFrame;

然后将你的答案标签一个一个地移到问题标签下:

代码语言:javascript
复制
CGRect answerFrame = self.answerLabel1.frame;
answerFrame.origin.y = questionFrame.origin.y + questionFrame.size.height;
self.answerLabel1.frame = answerFrame;

answerFrame.origin.y = answerFrame.origin.y + answerFrame.size.height;
self.answerLabel2.frame = answerFrame;

answerFrame.origin.y = answerFrame.origin.y + answerFrame.size.height;
self.answerLabel3.frame = answerFrame;
票数 1
EN

Stack Overflow用户

发布于 2014-02-22 20:14:27

如果要使用UILabel,首先必须将其"numberOfLines“属性设置为0。值"0“意味着”无限制“,因此文本将在正确的行数中被打破。然后,您就有了确定标签大小的问题,因为高度取决于问题的长度。在这种情况下,您可以使用函数- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context ( iOS7可用,它取代iOS7之前可用的- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode )。一旦确定标签的高度,就会相应地更改其框架。显然,您必须更改答案标签的来源,以避免它们与问题标签发生冲突。请注意,如果问题和答案都太长,则最终可能会出现比屏幕高度高的总体标签高度。在这种情况下,您应该将所有这些标签放入滚动视图或表视图的单元格中,以允许滚动。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21959347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档