我有一个自定义的TableViewCell:
name
和event
是两个按钮。按钮名称将在代码中动态分配,如下所示:
[cell.newsEventName setTitle:event[@"name"] forState:UIControlStateNormal];
[cell.newsEventName setTitleColor:[UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0] forState:UIControlStateNormal];
有时这些名字太长,有时很短。我怎样才能动态地将它们放在一行中以避免这种情况:
如果我画的按钮太大而无法避免点,那么对于短名称,我还有很多空的空间。如何在这些条件下很好地放置它们?
答案 0 :(得分:1)
你在使用约束吗?对于增长/缩小的标签,您可以将其内容拥抱优先级设置得更高,并且它将始终增长。
如果你没有使用约束,你可以使它适合大小,或者在单元格进行布局时动态地重新调整大小
答案 1 :(得分:1)
您可以使用UIStackView。这将允许您动态调整按钮的大小。但是,如果您这样做,您将只能与iOS 9兼容。您可以添加stackview,就像在界面构建器中添加任何其他元素一样。
答案 2 :(得分:1)
您是否尝试过AutoLayout。尝试在自定义单元格中使用AutoLayout来固定单元格中子视图的位置。 而不是固定按钮的宽度给它在单元格中的位置。 希望这能解决你的问题。 您可以参考此链接http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout。
答案 3 :(得分:0)
让我们把它分解为3个步骤
答:找到名称所需的大小
CGSize sizeMax = CGSizeMake(cell.frame.size.width, FLT_MAX);
CGSize sizeExpected = [stringName sizeWithFont:buttonName.titleLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:NSLineBreakByWordWrapping];
float buttonWidth = sizeExpected.width;
B:设置按钮的宽度(带名称)
CGRect r1 = cell.newsEventName.frame;
cell.newsEventName setFrame:CGRectMake(r1.origin.x, r1.origin.y, buttonWidth, r1.size.height);
C:设置标签的宽度
CGRect r2 = cell.newsEventLabel.frame;
cell.newsEventLabel setFrame:CGRectMake(r1.origin.x+buttonWidth, r2.origin.y, r2.size.width, r2.size.height);