根据滚动视图中的位置更改导航栏的标题

Changing navigationBar's title based on position in scrollView

我正在尝试根据滚动视图的 x 位置更改导航栏的标题。这是我的代码。我不知道为什么它不起作用或者它是否可能:

if(scrollView.contentOffset.x == 0) {
            self.navigationController!.navigationBar.topItem!.title = "First"
        }
        else if(scrollView.contentOffset.x == self.view.frame.size.width) {
            self.navigationController!.navigationBar.topItem!.title = "Second"
        }
        else if(scrollView.contentOffset.x == self.view.frame.size.width*2) {
            self.navigationController!.navigationBar.topItem!.title = "Third"
        }

有什么问题吗?我把它放在 scrollView 所在的 ViewController 的 viewDidLoad 中。它只是将导航栏的标题设置为 "First"。是因为我放了viewDidLoad吗?我是否必须将其放入更新的新方法中?

我也试过把下面的代码放进去,当scrollView结束拖动时更新。但这并没有改变任何东西:

func scrollViewDidEndDragging(scrollView: UIScrollView!, willDecelerate decelerate: Bool) {
        if(self.scrollView.contentOffset.x == 0) {
            self.navigationController!.navigationBar.topItem!.title = "First"
        }
        else if(self.scrollView.contentOffset.x == self.view.frame.size.width) {
            self.navigationController!.navigationBar.topItem!.title = "Second"
        }
        else if(self.scrollView.contentOffset.x == self.view.frame.size.width*2) {
            self.navigationController!.navigationBar.topItem!.title = "Third"
        }
    }

self.scrollView.contentOffset.xscrollViewDidEndDragging 内保持记录 null。有什么原因吗?

你应该把你的代码放在 scrollViewDidScroll() 委托方法中,如果你的计算没问题,它就会起作用。祝你好运!

将此代码放入 scrollViewDidScroll: 方法,并且不要忘记将 self 设置为滚动视图的委托。