如何在iOS 11中关闭UITableView调整大型游戏?

时间:2017-09-30 19:38:30

标签: ios swift uitableview ios11

iOS 11中有这么大的标题功能,当UITableViewController的表格滚动到顶部时会显示大标题,当用户将表格从顶部滚动时会折叠成标准的小标题。这是标准行为。我需要导航控制器的行为有点不同 - 我需要始终显示大标题。怎么做到这一点?

以下代码无效,滚动时仍会折叠。

navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.largeTitleDisplayMode = .always

2 个答案:

答案 0 :(得分:3)

我在UITableViewController内嵌入UIViewController时无意中实现了它。

我不确定这是Apple的错误还是预期的行为。

所以堆栈就像UINavigationController一样简单 - > UIViewController(用作容器) - > UITableViewController

以下是嵌入式UITableViewController全屏

的视图控制器的示例
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var vc = UITableViewController(style: .plain)
    var array: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        vc.view.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(vc.view)
        view.addConstraint(view.leadingAnchor.constraint(equalTo: vc.view.leadingAnchor))
        view.addConstraint(view.rightAnchor.constraint(equalTo: vc.view.rightAnchor))
        view.addConstraint(view.safeAreaLayoutGuide.topAnchor.constraint(equalTo: vc.view.topAnchor))
        view.addConstraint(view.bottomAnchor.constraint(equalTo: vc.view.bottomAnchor))

        vc.tableView.delegate = self
        vc.tableView.dataSource = self

        array = "0123456789".characters.map(String.init)
        vc.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "identifier")

        title = "Title"
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return array.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath)
        cell.textLabel?.text = array[indexPath.row]
        return cell
    }
}

以下是结果

enter image description here

希望它有所帮助。

P.S。令人惊讶的是,我目前的问题是我不知道如何通过这种架构获得崩溃行为:)

答案 1 :(得分:0)

我要做的是在NavigationBar和TableView之间添加另一个高度为1的视图。

let tableViewSeperator: UIView = {
    let view = UIView()
    // remove the color, so it wont be visible.
    view.backgroundColor = UIColor.systemBlue 
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
 }()

重要的一件事是将此分隔符视图添加为tableView之前的viewcontroller视图的子视图,否则它将不起作用

view.addSubview(tableViewSeperator)
view.addSubview(tableView)

或者如果您想保存一行代码,也可以这样做。

[tableViewSeperator, tableView].forEach({view.addSubview($0)})

然后像这样设置其约束。

tableViewSeperator.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
tableViewSeperator.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true        
tableViewSeperator.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
tableViewSeperator.heightAnchor.constraint(equalToConstant: 1).isActive = true

最后一件事是将tableView TopAnchor更改为sperator View的BottomAnchor。

tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
tableView.topAnchor.constraint(equalTo: tableViewSeperator.bottomAnchor, constant: 0).isActive = true
tableView.bottomAnchor.constraint(equalTo: createItemBtn.topAnchor, constant: 0).isActive = true

现在,当您滚动导航栏时,导航栏将保持为大。