我有一个视图,其中许多标签都填充了解析的XML。该视图位于UIScrollView中。某些XML对于标签来说太长了。我正在根据XML内容调整标签大小。当标签重新调整大小时,它们会与后续标签重叠,因为我的UIView(在UIScrollView中)没有重新调整大小。我一直在网上搜索数小时试图找到答案,但我尝试过的一切都没有达到我想要的水平。任何帮助将不胜感激。
这是我的populateLabels方法。
-(void) populateLabels {
NSString *noInfo = (@"No Information Available");
lblCgName.text = _Campground.campground;
NSString *cgLoc = _Campground.street1;
NSString *cgCity = _Campground.city;
NSString *cgState = _Campground.state1;
NSString *cgCountry = _Campground.country;
NSString *cgZipPostal = _Campground.zipPostal;
cgLoc = [[cgLoc stringByAppendingString:@", "] stringByAppendingString:cgCity];
cgLoc = [[cgLoc stringByAppendingString:@", "] stringByAppendingString:cgState];
cgLoc = [[cgLoc stringByAppendingString:@", "] stringByAppendingString:cgCountry];
cgLoc = [[cgLoc stringByAppendingString:@" "] stringByAppendingString:cgZipPostal];
lblCgLoc.text = cgLoc;
double dRate = [_Campground.regRate1 doubleValue];
double dRate2 = [_Campground.regRate2 doubleValue];
NSString *rate = [[NSString alloc] initWithFormat:@"$%0.2f",dRate];
NSString *rate2 = [[NSString alloc] initWithFormat:@"$%0.2f",dRate2];
if ([rate2 isEqualToString:@"$0.00"]) {
lblRate.text = rate;
} else {
rate = [[rate stringByAppendingString:@" - "] stringByAppendingString:rate2];
lblRate.text = rate;
}
double dPaRate = [_Campground.paRate1 doubleValue];
double dPaRate2 = [_Campground.paRate2 doubleValue];
NSString *paRate = [[NSString alloc] initWithFormat:@"$%0.2f",dPaRate];
NSString *paRate2 = [[NSString alloc] initWithFormat:@"$%0.2f",dPaRate2];
if ([paRate2 isEqualToString:@"$0.00"]) {
lblPaRate.text = paRate;
} else {
paRate = [[paRate stringByAppendingString:@" - "] stringByAppendingString:paRate2];
lblPaRate.text = paRate;
}
lblLocal1.text = _Campground.localPhone1;
lblLocal2.text = _Campground.localPhone2;
lblTollFree.text = _Campground.tollFree;
lblFax.text = _Campground.fax;
lblEmail.text = _Campground.email;
lblWebsite.text = _Campground.website;
NSString *gps = _Campground.latitude;
NSString *longitude = _Campground.longitude;
gps = [[gps stringByAppendingString:@", "] stringByAppendingString:longitude];
lblGps.text = gps;
lblHighlights.text = _Campground.highlights;
lblHighlights.lineBreakMode = UILineBreakModeWordWrap;
lblHighlights.numberOfLines = 0;
//label resizing
CGSize maximumLabelSize = CGSizeMake(296,9999);
CGSize expectedLabelSize = [_Campground.highlights sizeWithFont:lblHighlights.font
constrainedToSize:maximumLabelSize
lineBreakMode:lblHighlights.lineBreakMode];
//adjust the label the the new height.
CGRect newFrame = lblHighlights.frame;
newFrame.size.height = expectedLabelSize.height;
lblHighlights.frame = newFrame;
lblTents.text = _Campground.tents;
lblNotes.text = _Campground.notes;
lblDirections.text = _Campground.directions;
lblRentals.text = _Campground.rentals;
}
答案 0 :(得分:3)
- (void) populateLabels
方法位于何处?如果它位于视图控制器中,您应该可以轻松访问需要调整大小的视图。或者,如果标签(看起来已经创建)已添加到需要调整大小的视图中,则可以访问其超级视图。你已经有了所需的尺寸,只需在方法结束时设置superview的框架尺寸。
如果您尝试首先根据字符串内容查找每个标签的大小,则需要使用NSString方法:-sizeWithFont。有几种变体允许您指定约束:
计算单行文本的度量标准 - sizeWithFont: - sizeWithFont:forWidth:lineBreakMode: - sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode: 计算多行文本的度量标准 - sizeWithFont:constrainedToSize: - sizeWithFont:constrainedToSize:lineBreakMode:
请记住,UILable只显示1行文字。另请注意,这将返回字符串占用的大小。像UILabels和UITextViews这样的视图往往会添加填充,因此在计算高度时可能需要考虑到这一点。在计算出高度并放置每个标签后,您应该知道superView需要的大小并进行适当的设置。此外,如果您不知道视图中哪个标签将是最后/最低/最远(superView的大小应该是origin.y +最后一个视图的size.height),您可以执行以下操作:
CGFloat totalHeight = 0.0f;
for (UIView *view in superView.subviews)
if (totalHeight < view.frame.origin.y + view.frame.size.height) totalHeight = view.frame.origin.y + view.frame.size.height;
如果你还不知道它,你会得到超视图的高度(如果需要,你可以对宽度做同样的事情)。
答案 1 :(得分:1)
你真的需要使用一堆标签吗? 看来你需要使用UITextView或UIScrollView。
答案 2 :(得分:1)
根据子视图调整UIView大小的一般方法是sizeToFit
此方法会自动调整UIView的大小。
如果您想限制大小,则需要使用sizeThatFits:
此方法不会自动调整UIView大小,而是返回大小。
只是旁注:这两种方法只考虑子视图,因此不是图纸也不是核心文本。