gpt4 book ai didi

ios - tableView.setContentOffset 不适用于嵌入在 UIViewcontroller 中的 UITableView

转载 作者:可可西里 更新时间:2023-11-01 01:57:37 33 4
gpt4 key购买 nike

我在 UITableViewController 中有这段代码,它运行良好。

func setupSearchBar() {
let searchBar: UISearchBar = searchController.searchBar
tableView.tableHeaderView = searchBar

let point = CGPoint(x: 0, y: searchBar.frame.size.height)
tableView.setContentOffset(point, animated: true
}

现在我正在重构我的代码以适应更多 MVC 风格的架构。我所做的是在 View 类中创建一个 UITableView:

class View: UIView {
lazy var tableView: UITableView = {
let table = UITableView()
table.translatesAutoresizingMaskIntoConstraints = false
return table
}()

func configureView() {

// tableView
addSubview(tableView)
tableView.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
tableView.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
tableView.widthAnchor.constraint(equalTo: widthAnchor).isActive = true
tableView.heightAnchor.constraint(equalTo: heightAnchor).isActive = true
}
}

然后在我的 ViewController 中使用 View 类:

class ViewController: UIViewController {

var newView: View! { return self.view as! View }

override func loadView() {
view = View(frame: UIScreen.main.bounds)
newView.configureView()
}

override func viewDidLoad() {
super.viewDidLoad()

setupSearchBar()
}

func setupSearchBar() {
let searchBar: UISearchBar = searchController.searchBar
newView.tableView.tableHeaderView = searchBar

let point = CGPoint(x: 0, y: searchBar.frame.size.height)
newView.tableView.setContentOffset(point, animated: true)
}

tableView 显示没有问题,其他一切都很好。唯一不起作用的是正在调用 setContentOffset,但它没有偏移内容。当用户第一次打开此 viewController(类似于 iMessage)时,我希望默认情况下隐藏搜索栏,但是在我将代码从 UITableViewController 移动到单独的文件(UIView + UIViewController)之后,如本例所示,搜索栏始终默认显示.

我不确定为什么它不起作用。任何帮助将不胜感激。

最佳答案

可能是布局的时间问题。不要在 viewDidLoad 中调用 setUpSearchBar,而是稍后在 viewDidLayoutSubviews 中调用,当初始布局实际发生时。这个方法可以被多次调用,所以使用一个标志来防止它被多次调用:

var didSetUp = false
override func viewDidLayoutSubviews() {
if !didSetUp {
didSetUp = true
setUpSearchBar()
}
}

另外:您的animated 值是错误的:

newView.tableView.setContentOffset(point, animated: true)

你的意思是 false。您不希望此运动可见。表格 View 应该只是在搜索栏不可见的情况下出现。

关于ios - tableView.setContentOffset 不适用于嵌入在 UIViewcontroller 中的 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50440007/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com