【发布时间】:2021-10-07 18:16:15
【问题描述】:
我有一个UITableView 和内部UITableViewCell,我添加了视图并尝试根据屏幕高度或UITableView 的height 设置该视图的高度或单元格的高度。最初,我能够做到这一点,但是在 viewWillAppear 重新加载表中时,无法为该视图或单元格的高度设置正确的高度。是身高问题还是其他问题,无法识别。任何帮助将不胜感激,并感谢您的回复。问题的标题可能令人困惑,或者您是否发现任何不相关的代码,欢迎提出建议(编辑)。
代码:
import UIKit
class PageViewController: UIViewController {
@IBOutlet weak var tblPager: UITableView!
let screenHeight = UIScreen.main.bounds.size.height
let vColors: [UIColor] = [.red, .blue, .orange, .brown, .cyan, .darkGray, .green, .red, .blue, .orange, .brown, .cyan, .darkGray, .green]
var pageSizeHeight: CGFloat = 0
override func viewDidLoad() {
super.viewDidLoad()
pageSizeHeight = screenHeight - (getTopSafeArea() + getBottomSafeArea() + 54)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
delay(interval: 10.0) {
print("Reload table after 10 seconds")
self.tblPager.reloadData()
}
}
}
//MARK:- TableView Delegate
extension PageViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return vColors.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PageCell", for: indexPath) as! PageCell
cell.backgroundColor = vColors[indexPath.row]
cell.viewHeight.constant = pageSizeHeight
return cell
}
}
class PageCell: UITableViewCell {
@IBOutlet weak var vwPage: UIView!
@IBOutlet weak var viewHeight: NSLayoutConstraint!
}
func getTopSafeArea() -> CGFloat {
let window = UIApplication.shared.keyWindow
let topPadding = window?.safeAreaInsets.top ?? 0
return topPadding
}
func getBottomSafeArea() -> CGFloat {
let window = UIApplication.shared.keyWindow
let bottomPadding = window?.safeAreaInsets.bottom ?? 0
return bottomPadding
}
func delay(interval: TimeInterval, closure: @escaping () -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + interval) {
closure()
}
}
输出:
【问题讨论】:
-
显示
heightForRowAt indexPathtableView 的委托方法。 -
@Starsky 我不认为它会影响输出,所以你能详细说明一下吗?
-
您是否尝试从
cellForRowAt设置单元格的高度? -
@Starsky 请检查一次代码
-
由于单元格内的视图是唯一的视图,您可以将其设置为 contentView 的大小,然后在指定的委托方法
heightForRowAt中操作单元格的高度。您在这里尝试做的事情是不正确的。如果您是 iOS 开发的新手,那么也许可以阅读一些答案 here。祝你好运!
标签: ios swift uitableview