【问题标题】:Navigation bar in appended view controllers附加视图控制器中的导航栏
【发布时间】:2015-09-29 14:47:18
【问题描述】:

我目前将三个视图控制器附加到一个名为 V1 的视图控制器上。 V1 有一个水平滚动视图,可以在滚动时将其他三个视图推送到屏幕上。

我想在三个视图控制器中的每一个中嵌入一个导航栏,以便每个视图控制器都可以根据滚动到的页面拥有自己独立的栏按钮和标题。

我的问题是确定我在哪里嵌入导航栏。我尝试了 V1,但它没有给出我想要的结果。如何让每个视图都有自己的导航栏?

class ViewController: UIViewController {

    @IBOutlet var scrollView: UIScrollView!
    override func viewDidLoad() {
        super.viewDidLoad()
        //Changes Navi bar
        // navigationController!.navigationBar.barTintColor = UIColor(red: 237/255, green: 15/255, blue: 140/255, alpha: 1)
        // navigationController!.navigationBar.barStyle = UIBarStyle.Black

        // Do any additional setup after loading the view, typically from a nib.
        let v1 = storyboard!.instantiateViewControllerWithIdentifier("A") as! Offers
        let v2 : View2 = View2(nibName: "View2", bundle: nil)        
        let v3 = storyboard!.instantiateViewControllerWithIdentifier("C") as! DiscoveryPage

        self.addChildViewController(v1)
        self.scrollView.addSubview(v1.view)
        v1.didMoveToParentViewController(self)

        self.addChildViewController(v2)
        self.scrollView.addSubview(v2.view)
        v2.didMoveToParentViewController(self)

        self.addChildViewController(v3)
        self.scrollView.addSubview(v3.view)
        v3.didMoveToParentViewController(self)

        //Set the frame

        var v2Frame : CGRect = v2.view.frame
        v2Frame.origin.x = self.view.frame.width
        v2.view.frame = v2Frame

        var v3Frame : CGRect = v3.view.frame
        v3Frame.origin.x = self.view.frame.width * 2
        v3.view.frame = v3Frame

        self.scrollView.contentSize = CGSizeMake(self.view.frame.width * 3, self.view.frame.height)
    }
}

【问题讨论】:

    标签: ios xcode swift uinavigationcontroller swift2


    【解决方案1】:

    这里稍微解释一下,希望能回答你的问题。

    如果您使用UINavigationController 来管理视图控制器流。那么你就不需要为每个视图控制器提供自定义导航栏了,视图控制器的左上方和右上方的bar button item和title是UINavigationItem的一部分,UINavigationItemUIViewController的一个属性。

    每次将视图控制器推送到UINavigationController 时,导航控制器都会从视图控制器获取导航项并将其设置到导航栏上。导航栏由UINavigationController自动管理。

    您只需要在关联的UINavigationItem 中编辑并提供您的导航相关信息。

    在情节提要中,如果您没有看到与视图控制器关联的导航项,您可以从对象中拖动一个项目并将其放到视图控制器中:

    如果您单击导航项,则可以从属性检查器中编辑这三个选项:

    如果您将UIBarButtonItem 从对象拖到与您的UIViewController 关联的UINavigationItem,它会自动将其添加到您的左侧栏按钮。

    【讨论】:

    • 感谢您的解释。在我的场景中,我将使用哪个视图控制器来嵌入导航控制器?
    • 你已经有了一个导航控制器,让它成为属性检查器的初始视图控制器。现在 V1 是您的初始视图控制器,这意味着,当您的应用加载时,它会将 v1 显示为初始视图。
    • 我已经完成了你所说的一切并更新了上面的图片来说明我的故事板的样子。你能解释一下为什么当我水平滚动浏览 V1 的滚动视图时导航栏没有改变。
    • 所以基本上,您还有另一个UIScrollView 可以在V1 中托管更多UIViewController
    • 是的,我使用滚动视图来托管其他三个视图控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多