更改导航栏项目内容而不影响视图内容

Posted

技术标签:

【中文标题】更改导航栏项目内容而不影响视图内容【英文标题】:Changining navigation bar items content without affecting views content 【发布时间】:2015-09-18 13:53:23 【问题描述】:

在不改变 UITableView 内容、滚动位置、其他元素等的情况下改变导航栏内容是否有一种通用模式?

我有一个带有标题和按钮的导航栏。按下此按钮时,我希望栏显示一个文本框而不是标题和另一个具有另一个操作的按钮。在文本栏外点击或按钮 segue 展开。

显而易见的方法是在没有动画的情况下将 segue 推送到另一个场景,重新实现相同的 UITableView 内容和位置,但我发现这非常低效。

另一种方法是尝试在同一场景中进行。我试图将文本框放在标题的导航栏位置。在这种情况下,文本框替换了导航栏的标签,即使文本框被隐藏也不让它显示。

ios 8-9 + 斯威夫特 谢谢!

【问题讨论】:

【参考方案1】:

您可以将控制器的导航项的标题视图设置为所需的视图

 override func viewDidLoad()

    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let titleView : UIView = UIView(frame: CGRectMake(0.0, 0.0, 40.0, 64.0))
    let titleLabel : UILabel = UILabel (frame: CGRectMake(0.0, 0.0, 40.0, 34.0))
    titleLabel.text = "title"
    let button : UIButton = UIButton(frame: CGRectMake(0.0, 44.0, 40.0, 20.0))

    titleView.addSubview(titleLabel)
    titleView .addSubview(button)
    self.navigationItem.titleView = titleView

【讨论】:

感谢您的回答!这正是我所做的。硬编码仍然很少有“但是”,包括手动添加约束等。我正在寻找一种 Apple 方式的解决方案(可能创建一系列导航栏类并在它们之间切换),它受益于情节提要设计和自动布局来规避未来可能出现的问题。

以上是关于更改导航栏项目内容而不影响视图内容的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 中更新导航栏而不更改视图

操作栏列表导航宽度 - 换行内容

在移动浏览器上隐藏地址/导航栏而不需要滚动内容?

单击抽屉的任何项目而不在android中关闭时更改导航抽屉内的视图和内容

Xcode 约束将视图上的所有内容推到最顶部(导航栏后面)

导航栏后面的内容