如何在 UITableViewCell swift 中获得正确的 UIView 宽度

Posted

技术标签:

【中文标题】如何在 UITableViewCell swift 中获得正确的 UIView 宽度【英文标题】:How to get correct width of a UIView in UITableViewCell swift 【发布时间】:2016-07-14 13:25:15 【问题描述】:

我在 IB 中的原型单元格中创建了一个 UIView 并添加了约束。该单元格有一个自定义类。当我尝试在 cellForRowAtIndexPath 中获取 UIView 的宽度时,它返回 476 而不是 251。在阅读了有关此主题的 SO 以及许多答案后,我尝试在 cellForRowAtIndexPath 或子类中调用 setNeedsLayout 和 layoutSubviews() 但均不返回正确的值。高度 20 是正确的。非常感谢任何帮助!

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCellWithIdentifier("EventCell") as! CustomResultsTVCell

    // cell.setNeedsLayout()

    let maxWidth = cell.barView.frame.width
    print("barview maxWidth is \(maxWidth)")
    // prints 476.0

【问题讨论】:

您面临的问题是什么?您里面的物品显示不正确? 您是否检查过单元格视图的自动布局属性。宽度有什么限制吗? @jo3birdtalk - 问题是它在 iphone5S 上运行的设备的屏幕宽度为 320。而 maxwidth 显示的比这大得多。 @triple.s - 单元格内容视图上没有设置约束。它们都是后代约束。 首先,您不应该为屏幕大小而烦恼。让自动布局为您完成工作。使用自动布局,无论是在 iPhone 5s 上显示,还是在 iPad Pro 尺寸上显示,都无所谓。编辑您的问题以显示单元格内的项目,以便我可以进一步帮助您。 【参考方案1】:

您添加了 55 和 10 的 trailingleading 约束。这将使宽度成为您的父视图,在这种情况下 CustomResultsTVCell 减去 trailing 的 55 和 leading 空间的 10 .

如果您想获得硬编码的 251 宽度,您应该将 Width 设置为等于 251 constraint

或者,如果您实际上认为在应用 trailingleading 空间后应该获得 251 宽度,那么我认为您的 CustomResultsTVCellUITableView 的约束不在您的宽度思维。也许也可以向我们展示这些约束。

【讨论】:

嗨 Zac,我希望宽度根据其运行的设备进行调整,这就是我没有硬编码 251 的原因。我已经清除了单元格,所以 UIView 只是有一个前导和内容视图的尾随约束为 0。 TableVC 嵌入在 ViewContoller 中的 ContainerView 中,模拟指标大小设置为 iPhone 4.7 英寸。所以 UIView 应该是 375 宽。但现在它以 584 打印。如果我将模拟尺寸更改为 4 英寸,则打印为 359。当它在 5S 设备上运行时,模拟尺寸如何影响它。奇怪.... 我担心在这种情况下模拟指标大小可能会被覆盖。通常我们会放入一个视图控制器层次结构来调整它的大小。您是否在运行时调试并检查过 ContainerView 的宽度? 是的,容器视图在运行时是 320 宽度。 TableVC 嵌入在容器中。由于某种原因,TableVC 没有选择与容器相同的尺寸...... 扎克还有其他想法吗?? 您能否用更多信息更新问题,例如单元格中有哪些项目以及容器视图的约束?

以上是关于如何在 UITableViewCell swift 中获得正确的 UIView 宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift3中以其他方法更新UITableviewcell标签?

想知道如何以编程方式在 swift 3.0 中对 UITableViewCell 进行子类化?

(Swift) 如何在 UITableView 和 UITableViewCell 之间来回传递数据?

如何在 Swift 中检测对 UITableViewCell 的 UIImageView 的触摸?

如何在 Swift 中的 UITableViewCell 上添加带有单击事件的按钮?

当所有文本字段都填写在uitableviewcell(SWIFT)中时如何启用按钮