我有一个UIView
包含在Interface Builder .xib文件中创建的UILabel
。标签文本是从代码设置的,我希望UIView
和UILabel
调整大小以适应使用自动布局的文本。
标签配置:
视图加载如下:
MyView *myView = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0];
myView.myLabel.text = @"My short or long text";
我将它用作表头:
[self.tableView setTableHeaderView:myView];
视图没有调整大小,它在最后用...截断一行。如何让它调整大小?
我尝试增加标签的垂直内容拥抱和内容阻力,我尝试添加低优先级高度约束,我尝试setPreferredMaxLayoutWidth
,一切都没有运气。
注意:这是一个简化的例子。我将在视图中需要更多元素,并且我希望避免根据标签sizeWithFont
手动计算每个坐标。我的理解是,汽车布局应该是这个的圣杯。
答案 0 :(得分:0)
CGSize maximumSize = CGSizeMake(maxWidthOfYourLabel, 9999);
UIFont *myFont = label.font;
CGSize myStringSize = [yourString sizeWithFont:myFont constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping];
label.frame = CGRectMake (label.frame.origin.x, label.frame.origin.y, myStringSize.width, myStringSize.height);
yourView.height = label.height;
这是我所知道的唯一方式,这涉及sizeWithFont:
答案 1 :(得分:0)
如果您使用autolayout调整其标题大小,我怀疑UITableView会很好地与您的视图一起使用。我们使用动态大小的表头(或页脚)的方式是这样的:
self.tableView.tableHeaderView = myView;
第2步是关键。即使应用相同的视图,您也必须再次设置tableHeaderView
。我知道必须在自动布局范例中使用框架非常难看,但如果找到放置self.tableView.tableHeaderView = myView;
的正确方法,则可能不必这样做。
答案 2 :(得分:0)
我遇到了和你一样的问题。
我的工作是这样的:
//Init headerView from nib file
//Set the content to show
[headerView setupWith:somethingToShow];
headerView.height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
self.tableView.tableHeaderView = headerView;