gpt4 book ai didi

ios - hidesBarsOnSwipe 将意外显示工具栏

转载 作者:行者123 更新时间:2023-11-30 13:54:10 27 4
gpt4 key购买 nike

我在两个 View Controller 中设置了hidesBarsOnSwipe=true,没有工具栏的Foo View Controller 推送有工具栏的Bar View Controller 。当 Bar 弹回 Foo 时,当我滚动 Foo View Controller 时,工具栏将显示。如果我不在 Bar View Controller 中设置 self.navigationController?.toolbarHidden = false,则工具栏将不会在 Bar 和 Foo View Controller 中显示。我使用 iOS8 SDK + Xcode 7.1.1 + Swift 2.1。

class FooTableViewController : UITableViewController
{
override func viewDidLoad() {
super.viewDidLoad()

self.navigationController?.hidesBarsOnSwipe = false
self.navigationController?.toolbarHidden = true
}

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)

self.navigationController?.toolbarHidden = true
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "12345678"

return cell
} }

class BarTableViewController : UITableViewController
{
override func viewDidLoad() {
super.viewDidLoad()

self.navigationController?.hidesBarsOnSwipe = true
self.navigationController?.toolbarHidden = false
}

override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)

self.navigationController?.hidesBottomBarWhenPushed = false
self.navigationController?.toolbarHidden = true
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "12345678"

return cell
}}

Bar Foo

最佳答案

您遇到两个问题:

  1. 您无法向 UITableViewController 添加任何内容
  2. 所有程序化的 toolbarHiddenhidesBarsOnSwipe 只会混淆操作系统,最终会导致工具栏位于错误的层上,与表格 View 一起滚动,以及类似的情况导航栏的奇怪之处。

您想要的是让第二个 TableView 由 UIViewController 处理,而不是由 UITableViewController 处理。编程上的更改很少,您只需要 UIViewController 采用数据源和表委托(delegate)协议(protocol)。

无需修改显示/隐藏工具栏。代码更简单,您可以定义下面 Storyboard中未列出的所有内容。

Foo(无工具栏):

class FooTableViewController: UITableViewController {
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "Foo \(indexPath.row)"

return cell
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("Bar", sender: self)
}
}

(带工具栏):

class BarTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "Bar \(indexPath.row)"

return cell
}
}

最终产品:

Foo & Bar

<小时/>

► 在 GitHub 上找到此解决方案以及关于 Swift Recipes 的更多详细信息.

关于ios - hidesBarsOnSwipe 将意外显示工具栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863028/

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