gpt4 book ai didi

ios - NavigationItem 的 titleView 动画不正确

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:10:26 25 4
gpt4 key购买 nike

我已经查看了所有我能找到的类似问题,但我还没有找到解决这个问题的方法。

我正在设置 titleView viewDidLoad 中的此类属性:

self.navigationItem.titleView = label

View Controller 是导航栈的一部分。当您点击前一个 View Controller 中的一行时,它会将此 Controller 插入堆栈。完全正常的 UINavigationController 东西。

当这个 View Controller 开始动画时,标 checkout 现在原点(左上角),然后停留在那里直到 View Controller 完成动画,然后它跳(无动画)到导航中间的正确位置酒吧。

点击后退按钮后,标题 View 会正确显示动画,就像普通标题一样。

这是viewDidLoad中的代码:

let label = UILabel(frame: CGRect.zero)
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
label.backgroundColor = .red
label.text = "test"
label.sizeToFit()
self.navigationItem.titleView = label

我尝试过的事情:

  • 指定一个框架:没有变化。另外我不想指定一个框架。我不想对导航栏的高度做出假设。

  • 将其移至 viewWillAppear : 没有变化。

  • 将其移至 viewDidAppear : 更好但仍然不正确。在动画完成之前标签根本不会出现然后它出现在它应该出现的地方,没有动画它只是出现。正确的行为是像普通标题一样从右到左动画。

使用 Xcode 中的 Master-Detail 项目模板可以轻松重现这一点。如果您想尝试它,只需将上面的代码添加到 configureView() 的顶部即可。在 DetailViewController.swift .在该模板中,导航项的标题被硬编码到 Storyboard中。您可以通过搜索“详细信息”轻松删除它。单击显示 Navigation Item: Title = "Detail" 的结果然后从检查器 Pane 中删除该字符串。


更新

@synndicate 的建议对 UILabel 非常有效。上面的例子。但我真正的问题是 UIStackView .当我按照 @synndicate 的方法使用堆栈 View 时,我又遇到了另一个动画问题。这次标题 View 开始滑入,但一直动画到原点。动画完成后,它会捕捉到应有的位置。

这是 prepare(for:sender:) 中的代码正如@synndicate 建议...

let label = UILabel(frame: CGRect.zero)
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
label.backgroundColor = .red
label.text = "test"
let stackView = UIStackView(frame: CGRect.zero)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.addArrangedSubview(label)
stackView.sizeToFit()
controller.navigationItem.titleView = stackView

还有什么建议吗?

此外,这是 Xcode 8 和 iOS 10。

更新 2

我发现上面的堆栈 View 代码在 viewDidLoad 中完美地动画化(就像普通标题一样)对于导航层次结构的根是 UINavigationController 的 View Controller .当导航层次结构的根是 UISplitViewController 时会出现问题。 .

所以我想我可以将我的问题更新为...

如何配置 UIStackView将在 navigationItem 上设置的 titleView属性,其中导航层次结构的根是 UISplitViewController

最佳答案

在将 View Controller 压入堆栈之前,您能否将代码移动到?

例如在 Master-Detail 项目的 MasterViewController.swift

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow {

let object = objects[indexPath.row] as! NSDate
let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true

let label = UILabel()
label.textAlignment = .center
label.backgroundColor = .red
label.text = "test"
label.sizeToFit()

controller.navigationItem.titleView = label

}
}
}

关于ios - NavigationItem 的 titleView 动画不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44166476/

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