我正在创建一个问卷调查应用程序。在视图控制器中,我有一个问题作为标签显示,然后下面有三个答案也显示为标签。问题是,如果问题有多行,它无论如何都会显示在一行中,如果我拉伸标签,它就会与答案重叠。
什么是正确的方式来显示问题,以使答案只出现在问题的下面,不管问题有多长?

发布于 2014-02-22 20:19:18
尝试为您的问题标签将属性numberOfLines设置为0,它将允许显示无限行数。然后使用iOS 7方法boundingRectWithSize:options:context:计算文本大小。
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;然后将你的答案标签一个一个地移到问题标签下:
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;发布于 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 )。一旦确定标签的高度,就会相应地更改其框架。显然,您必须更改答案标签的来源,以避免它们与问题标签发生冲突。请注意,如果问题和答案都太长,则最终可能会出现比屏幕高度高的总体标签高度。在这种情况下,您应该将所有这些标签放入滚动视图或表视图的单元格中,以允许滚动。
https://stackoverflow.com/questions/21959347
复制相似问题