如何在一行中正确添加两个按钮和一个标签?

时间:2015-10-16 01:22:06

标签: ios objective-c user-interface uibutton

我有一个自定义的TableViewCell:

enter image description here

nameevent是两个按钮。按钮名称将在代码中动态分配,如下所示:

[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];

有时这些名字太长,有时很短。我怎样才能动态地将它们放在一行中以避免这种情况:

enter image description here

如果我画的按钮太大而无法避免点,那么对于短名称,我还有很多空的空间。如何在这些条件下很好地放置它们?

4 个答案:

答案 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);