在UITableView中使用动态标签宽度管理自动标题高度

时间:2017-06-07 11:25:39

标签: ios autolayout ios-autolayout uitableviewsectionheader uitableviewautomaticdimension

我想创建一个动态高度的UITableView标头。我在视图中有四个标签,并且必须根据每个UILabel中的内容调整标题的高度。我想要实现类似于这个图像的东西。 Sample image.

根据屏幕尺寸,标签的宽度将是动态的。 "类型"标签将覆盖屏幕的2/3左右,其余标签将在三个标签之间平均分配。根据屏幕尺寸,标签可以是多线的,我想根据标签的内容管理主视图的高度。

当我给标签赋予固定宽度约束时,我成功地能够管理高度,但我希望保持标签的宽度动态。这是一个UITableView标头。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

像这样的标题和设计就像tableViewCell一样创建一个customCell。

enter image description here

如何完成设计:

SMS EMAIL和PUSH NOTIFICATION被封装到一个stackView中,它已经自动布局了TYPE标签。

这是层次结构。

enter image description here

这是Type(2/3)的布局设计。自己准确计算。

enter image description here

这适用于stackView。

enter image description here

两者都是使用superView(即单元格)自动布局

<强> StackView:

enter image description here

和TYPE标签。

enter image description here

将此单元格插入tableView的headerView。

如何吗

viewDidLoad中的

tableView.register(UINib.init(nibName: String(describing: TableHeader.self), bundle: nil), forCellReuseIdentifier: "headerCell")

在各自的视图控制器中添加这两个功能。

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell") as! TableHeader
    return cell
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 58
}

这是输出:

enter image description here

适用于iOS 8:

StackView缺席,所以我们需要使用 UIView 。因为解释autolayout很棘手所以我只是分享了我的项目,这更容易理解。你可以从here结账

不使用StackView的输出如下:

2观点。为了更好地理解,已经给出了颜色。

enter image description here