如何从导航栏中删除 UIPageControl?

Posted

技术标签:

【中文标题】如何从导航栏中删除 UIPageControl?【英文标题】:How to remove UIPageControl from navigationBar? 【发布时间】:2015-10-17 15:22:12 【问题描述】:

我有一个显示不同类别的表格视图。 选取其中一个类别,它对显示适当子类别的 PageViewController 执行(推送)segue。 我决定在标题下的导航栏中显示 UIPageControl,它可以正常工作,但回到之前的控制器,我无法删除这些点,因此它们也错误地出现在呈现的 VC 中。

我是如何实现自定义导航栏的:

class MyClass 

//MARK: - Outlets

private var pageControl: UIPageControl?
var rLNavItem: UINavigationItem?

//MARK: - Life cycle

override func viewWillAppear(animated: Bool) 
    super.viewWillAppear(animated)
    let childView = self.navigationController?.childViewControllers.last
    childView?.navigationItem.rightBarButtonItem = // ...
    childView?.navigationItem.titleView = //...
    self.rLNavItem = childView?.navigationItem

    navigationController(self.navigationController!, willShowViewController: childView!, animated: true)


//MARK: - Navigation delegate

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) 

    self.navigationController?.delegate = self        
    let index = (navigationController.viewControllers as NSArray).indexOfObject(viewController)
    self.pageControl?.currentPage = index

    let navBarSize = self.navigationController?.navigationBar.bounds.size        
    let origin = CGPointMake(((navBarSize?.width ?? 0)/2), ((navBarSize?.height ?? 0)/2) )
    self.pageControl = UIPageControl(frame: CGRectMake(origin.x, origin.y + 18, 0, 0))
    self.pageControl?.numberOfPages = 4
    self.pageControl?.currentPage = itemIndex
    self.pageControl?.currentPageIndicatorTintColor = UIColor.whiteColor()
    self.pageControl?.pageIndicatorTintColor = UIColor.grayColor()
    self.pageControl?.hidesForSinglePage = true
    self.navigationController?.navigationBar.addSubview(pageControl!)
 

不幸的是,由于我的个人资料费率,我无法上传图片,但我的故事板由 TabBarController 组成,其中每个选项卡都嵌入了 NavigationController。 我试过给 pageControl 一个标签值,然后在导航委托方法中删除视图,但它不起作用。

有什么建议吗?

非常感谢

【问题讨论】:

我知道这不是一个很好的解决方案,但我发现导航委托方法被调用了两次。目前我删除了 self.navigationController?.delegate = self 并使用 viewWillDisappear 中的 tag 属性来删除 PagaControl 视图 【参考方案1】:

尝试在您的viewWillAppear 中设置self.pageControl = nil

【讨论】:

这不起作用。您不能将 nil 分配给页面控件。

以上是关于如何从导航栏中删除 UIPageControl?的主要内容,如果未能解决你的问题,请参考以下文章

如何从导航栏中删除 UISwipeGestureRecognizer

登录后如何从导航栏中删除登录按钮

如何从自定义导航栏中删除这条黑线

有人知道如何从导航栏中删除不需要的动画吗?截图

从 SwiftUI 中的导航栏中删除后退按钮文本

iOS:从导航栏中删除以编程方式添加的搜索栏