• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何在表格 View 中正确设置动态标题 View ?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:38:18 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我需要一个部分的标题 View 是一个 UIImageView 和一个 UILabel 在它下面。 ImageView 的高度在创建后不会改变,但标签中的文本可能会由于某些用户操作而改变。我需要动态更新整个标题 View 的高度(使用 AutoLayout,而不是更改框架)。

我一直在查看一些帖子,例如 this one ,但我尝试过的解决方案对我不起作用。当我更改标签中的文本时,我的标题 View 的高度没有更新。

也许我需要从一开始就了解它是如何工作的。首先,我想明确一点:

  1. tableView(_:viewForHeaderInSection 中将标题 View 作为 UIView 的子类提供与将其作为UITableViewHeaderFooterView 并将其注册到表格 View ?

  2. header View 中的 subview 需要哪些约束才能拥有动态高度?

  3. 应该如何动态更新header view的高度?



Best Answer-推荐答案


您可能想要使用如下功能。调整属性以适合您用于标签的字体和字体大小:

func handleEstimatedFrameForText(_ text: String) -> CGRect {
    let size = CGSize(width: 200, height: 1000)
    let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
    return NSString(string: text).boundingRect(with: size, options: options, attributes: [NSAttributedStringKey.font: UIFont(name: "AvenirNext-Medium", size: 16) as Any], context: nil)
}

当您使用该方法设置标题的大小时,您希望使用此函数来获取 UILabel 的高度 AFTER text has been added in and then add on and kind of内边距、UIImageView 高度等

在设置标题大小的方法中

 var height: CGFloat = 0
    let headerMessage = messages[indexPath.item]
    if let labelText = headerMessage.text {
        let headerImageViewHeight: CGFloat = 80 /* ADD IN YOUR UIIMAGEVIEW HEIGHT */
        height = self.handleEstimatedFrameForText(labelText).height + headerImageViewHeight
        return CGSize(width: view.frame.width, height: height)
    } else {
        return CGSize(width: view.frame.width, height: 200) /* DEFAULT SIZE */
    }

您可能需要向 self.handleEstimatedFrameForText(labelText).height + headerImageViewHeight 添加额外的几个像素,因为某些字体需要额外的 12 个像素左右才能在所有设备上工作。反复试验。

关于ios - 如何在表格 View 中正确设置动态标题 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48369292/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap