- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 UITableView
,UITableViewCell
有一个动态的 UILabel
,它将根据我从数据库中获取的数据添加。
我正在使用类似的东西
let testing = ["A", "B", "C", "D"] // This array is dynamic data
self.dictionaryTableView.estimatedRowHeight = 44
self.dictionaryTableView.rowHeight = UITableViewAutomaticDimension
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "vocabCell", for: indexPath)
var y = 0
for var i in 0..<self.testing.count {
let lbl = UILabel(frame: CGRect(x: 0, y: y, width: 50, height: 25))
lbl.text = self.testing[i]
lbl.numberOfLines = 0
cell.addSubview(lbl)
y += 20
}
return cell
}
但是 UITableViewCell
高度不会自动拉伸(stretch)以显示所有内容单元格。请帮忙这是结果
编辑 我在 UITableView cellForRowAtIndexPath 中为 uilabel 添加了约束,约束起作用了(我在扩展单元格高度时就知道了),但单元格高度不会自动拉伸(stretch)
var bottomAnchor: NSLayoutYAxisAnchor = NSLayoutYAxisAnchor()
for var i in 0..<self.testing.count {
let lbl = UILabel()
lbl.text = self.testing[i]
lbl.numberOfLines = 0
lbl.translatesAutoresizingMaskIntoConstraints = false
cell.addSubview(lbl)
lbl.leftAnchor.constraint(equalTo: cell.leftAnchor, constant: 16).isActive = true
lbl.widthAnchor.constraint(equalTo: cell.widthAnchor).isActive = true
lbl.heightAnchor.constraint(equalToConstant: 25).isActive = true
if i == 0 {
lbl.topAnchor.constraint(equalTo: cell.topAnchor).isActive = true
} else {
lbl.topAnchor.constraint(equalTo: bottomAnchor).isActive = true
}
bottomAnchor = lbl.bottomAnchor
}
return cell
非常感谢
最佳答案
您需要在实现中解决两件事:
在 tableView(_:, cellForRowAt:)
中将单元格出列之前创建单元格的布局。
出于效率原因,表格 View 在用户滚动时一遍又一遍地重用相同的单元格。这就是为什么您使用这个奇怪的“出队”函数而不是简单地实例化一个新单元格的原因。
let cell = tableView.dequeueReusableCell(withIdentifier: "vocabCell", for: indexPath)
将始终尝试返回刚刚滚出 View 的已用单元格。仅当没有可用的回收单元格时(例如,当前几个单元格出队时), TableView 才会创建单元格的新实例。
单元格的回收正是您永远不要在 tableView(_:, cellForRowAt:)
中创建单元格布局的原因,例如通过添加标签。当单元格被重复使用时,另一个标签将添加到您之前添加的标签之上,当它被第二次重复使用时,您最终会得到三个重叠的标签等。
这同样适用于约束。当您向 tableView(_:, cellForRowAt:)
中的单元格添加约束而不删除现有约束时,将在用户滚动时添加越来越多的约束,很可能导致严重的约束冲突。
相反,在出队之前设置单元格的布局。有几种方法可以实现这一点:
如果您在 Storyboard 中使用 UITableViewController
,您可以创建动态原型(prototype) 并直接在 Storyboard 中布置单元格。例如,您可以将标签拖到那里的原型(prototype)单元格,并在自定义 UITableViewCell
子类中为其创建一个导出。
您可以为您的单元创建一个 XIB 文件,在 Interface Builder 中打开它并在那里创建您的布局。同样,您需要创建一个具有适当 socket 的 UITableViewCell
子类,并将其与您的 XIB 文件相关联。
您可以创建一个 UITableViewCell
子类并完全在代码中设置您的布局,例如在单元格的初始化程序中。
您需要使用自动布局。
如果您在 Interface Builder 中创建布局,则只需添加必要的约束即可。如果您在代码中创建布局,则需要将所有要约束的 View 的 translatesAutoresizingMaskIntoConstraints
属性设置为 false
,例如:
lbl.translatesAutoresizingMaskIntoConstraints = false
在您的特定布局中,您需要使用单元格 contentView
的相应边缘来限制左侧、右侧、顶部和底部的标签。
如果您不知道如何操作,请阅读 Apple 的 Auto Layout Guide . (在 Interface Builder 中而不是在代码中执行此操作通常是更好的主意。)
关于如何使用 “UITableView 中的自动布局以实现动态单元格布局和可变行高”的非常详细的说明可以在 here 中找到。 .
关于ios - 具有动态 subview swift 的 UITableViewCell 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46988780/
我在自定义表格单元格中长按时添加 subview ,但是当我滚动表格时, subview 消失。 p> 我应该怎么做,以便当我向后滚动时,该 subview 仍然显示/出现在该单元格上,或者换句话说,
如何遍历 UIView 的所有 subview ,以及它们的 subview 和它们的 subview ? 最佳答案 使用递归: // UIView+HierarchyLogging.h @inter
如果我有 contentView 和 2 个 subview 。我想根据subviewB居中subviewA subviewA 和 subviewB 有相同的父 View 。 这就是我现在正在做的,将
我想向 self.view 添加一个覆盖整个区域的 subview (如调光 View )。但在它下面,有一些 View 我不希望受到添加的 subview 的影响(我不希望这些 View 具有变暗的
我正在尝试向 UITabBar 添加 subview ,它应该位于其他 UITabBar subview 之后。 我在 UITabBarController 的子类中添加了这样的 subview :
图像描述了我必须将这种 subview 添加到我现有的单元格中,并且在多次单击“添加”图标时还要添加相同的 subview 。 我在添加 subview 时遇到困难。如果有人能为我提供处理此结构的正确
我添加了一个 subview ,如下所示: func showPlayerView2() { self.view.frame = CGRect(x: 0, y: 0, width: view.
我的问题是关于 UIView/CALayer: Transform triggers layoutSubviews in superview 据报道,来自苹果的 TSI 回复: Generally,
我试图为我的主视图创建一个辅助 View 。这个 subview 需要很小的高度,它需要适合另一个带有标签的大 UIView。 问题是当我使用 UIView addSubview 时,第三个 UIVi
我正在尝试淡出整个 View ,但只有一个特定的 subview , 这将强调 subview更清晰的外观。假设 self.view 有 5 textfields和 2 UIView如subviews
我确信我在这里错过了一些愚蠢的东西,但我有 mainView、subviewA 和 subviewB。我试图将 subviewB 添加到 subviewA 并将其锚定在 subviewA 内部,但是它
我有一个包含 3 个 subview 的 View ,分别称为 view A、view B、view C。 当我删除 subview 时,意味着我需要自动设置边距以进行调整。 当我删除 view A
我有两个加载的 subview 。一个是位于 View Controller 内部的选项卡栏,它很早就加载,第二个是按下选项卡栏项目时出现的 View 。 但是,当添加此 subview 时,它会加载
在 iOS 应用中,我在主视图中添加了一个 subview : [self.view addSubview:firstUIImageSubview]; 但是在 subview 类 firstUIIma
我正在制作一个球程序,您可以通过长按手势将球 UIView subview 添加到 super View 。点击 View 会将其从父 View 中移除。 添加所有 View 效果很好,重新添加 Vi
我使用以下代码在单击按钮时将日期选择器 View 添加到我的应用程序主视图。 - (IBAction)CalenderButton_Click:(id)sender { // code to add
我正在努力向 View 添加 subview 。进度变量在其 View Controller 的 viewDidLoad() 中设置。 progressView frame size 设置正确,只是添
这是我的代码 var button = [UIButton?](count:3, repeatedValue: UIButton()) for i in 0...2{
我有一个 UIViewController,里面有几个不同的 UIView subview 。当用户调用某个 Action 时,我手动更改每个的大小、比例和位置。我想更新其中一个 UILabel( s
我的屏幕有一个主视图模型。它由 2 个 subview 模型组成。 其中一个负责注册部分。其中一个处理登录部分。其中一个负责处理菜单部分(如果经过身份验证,可以显示哪些菜单项,以及“欢迎“用户名”类型
我是一名优秀的程序员,十分优秀!