【问题标题】:Strange behavior when setting height of a table header view设置表头视图高度时的奇怪行为
【发布时间】:2016-01-14 14:19:23
【问题描述】:

我正在尝试使我的表格标题与其内容一样高。在情节提要中似乎不可能做到这一点,所以我尝试在加载视图时以编程方式设置高度。然而,表头比它的子视图高得多,而帧大小据说是相同的。

我在 viewDidLoad 函数中做了这个。

override func viewDidLoad() {
    super.viewDidLoad()

    ongoingOrderTableView.backgroundColor = UIColor.blueColor()
    tableHeader.backgroundColor = UIColor.redColor()

    tableHeader.frame.size.height = 440
    print(tableHeader.frame.size)
    //(560.0, 440.0) 
    print(qrLabel.frame.size)
    //(54.0, 21.0)
    print(qrImage.frame.size)
    //(440.0, 440.0)

} 

打印结果显示设置正确。

模拟器界面如下:

有人可以解释为什么会发生这种情况以及如何解决这个问题吗?

【问题讨论】:

  • 可能你的图片太小了?将 UIImageView 内容模式设置为 aspectFill 并查看它是否改变
  • @zp_x 什么也没发生。根据输出,标题视图的宽度应为 560,高度为 440。但它的高度似乎大于宽度。我无法理解。
  • 我觉得导航栏高度大概是44左右,所以相对header高度大概是440左右。你的图片大概是导航栏高度5左右,所以只有200左右。图片是你自己生成的还是自己生成的png 文件?
  • 如果生成的图片,可能有一些透明的padding,可以下载一个png图片试试看是否正确显示
  • @zp_x 这是一个 png 图像。问题是即使我为表头设置了相等的高度和宽度,它仍然不是方形的。

标签: ios xcode swift uitableview autolayout


【解决方案1】:

当使用自动布局时,iOS 将保持 600 * 600 的屏幕尺寸,直到调用 func viewDidLayoutSubviews()。因此,您应该在 viewDidLayoutSubviews() 而不是 viewDidLoad() 中动态调整布局。

我也将 print(tableHeader.frame.size) 放入 viewDidLayoutSubviews() 中,结果为 (374.0, 501.0)。当我在这个函数中调整标题高度时,结果都是正确的。

【讨论】:

    【解决方案2】:

    viewDidLayoutSubviews() 中设置表头视图的高度。 要调试问题,请在viewDidLayoutSubviews() 中添加断点并检查标题高度。

    根据我的经验,如果您没有从情节提要中添加 tableHeaderView,就会发生这种情况。

    【讨论】:

      【解决方案3】:

      这是您的导航栏的问题,

      尝试将顶部栏切换为Opaque Navigation Bar,在情节提要上选择 NavigationController > Simulated Metrics > 顶部栏 > 不透明导航栏

      例如有图像视图:

      默认/半透明:

      不透明:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 2020-07-09
        相关资源
        最近更新 更多