【问题标题】:Hide navigation bar and toolbar when user taps full screen image?用户点击全屏图像时隐藏导航栏和工具栏?
【发布时间】:2015-12-14 18:47:28
【问题描述】:

我需要有关设置此功能的帮助。从第一个视图控制器,用户点击缩略图以转到该视图控制器,该视图控制器全屏显示图像。我已经自定义了导航栏的外观,使其看起来与应用程序的其他部分不同,因此相同的导航栏不会与之前的链接。

我已经设法以我想要的方式显示导航栏,并且所有按钮也按我想要的方式工作。现在我只想在视图出现和用户点击时隐藏导航栏,以显示导航栏,甚至可能在该过程中将背景颜色从黑色更改为白色。这是我所拥有的:

var profileImage: UIImage!
var tap = UITapGestureRecognizer()

@IBOutlet var scrollView: UIScrollView!
@IBOutlet var fullSizeImage: UIImageView!

override fun viewWillAppear(animated: Bool) {

    self.fullSizeImage.image = profileImage
    self.scrollView.minimumZoomScale = 1.0
    self.scrollView.maximumZoomScale = 6.0

    tap.addTarget(self, action: "tappedScreen")
    fullSizeImage.addGestureRecognizer(tap)
    fullSizeImage.userInteractionEnabled = true

    let navBar = UINavigationBar(frame: CGRectMake(0, 20, self.view.frame.size.width, 44))
        navBar.barTintColor = UIColor.whiteColor()
        navBar.delegate = self

        let navItem = UINavigationItem()
        navItem.title = "Profile Image"


        let leftButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelButton:")
        leftButton.tintColor = UIColor(red: 37/255, green: 94/255, blue: 67/255, alpha: 1.0)

        let rightButton = UIBarButtonItem(title: "Gallery", style: UIBarButtonItemStyle.Plain, target: self, action: "galleryButton:")
        rightButton.tintColor = UIColor(red: 37/255, green: 94/255, blue: 67/255, alpha: 1.0)

        navItem.leftBarButtonItem = leftButton
        navItem.rightBarButtonItem = rightButton

        navBar.items = [navItem]

        self.view.addSubview(navBar)

}

fun tappedScreen() {

    print("Tapped Screen")
}

到目前为止,当我点击时,我的调试器会打印“点击屏幕”,所以我只是在寻找一些可以隐藏我的导航栏的代码。我尝试了许多不同的方法,我知道它会是:

navigationController?.barHideOnTapGestureRecognizer
// OR
navigationController?.hidesBarsOnTap = true
// OR
navigationController?.setNavigationBarHidden(true, animated: true)

但我似乎无法将它们放在正确的位置或其他地方,可能是因为我的自定义导航栏或因为我有一个来自先前视图控制器的自定义 segue?我正在使用所有最新版本的 swift、xCode 等。提前致谢!

【问题讨论】:

    标签: ios swift uigesturerecognizer


    【解决方案1】:

    对我来说,在 viewDidLoad 中设置 navigationController?.hidesBarsOnTap = true 有效。每次我点击屏幕中的任意位置时,它都会隐藏条形,然后分别显示它们。

    如果您想隐藏它们并且不再显示它们,您可以将 navigationController?.hidesBarsOnTap = true 放入您的 tappedScreen 函数中。

    如果您想要其他场景,请告诉我!

    编辑: 我得到了它!! :)

    好的,你想隐藏你的导航栏而不是导航控制器!!所以你可以使用这个:

    func tappedScreen()
    {
        navBar!.hidden = true;
    
    }
    

    【讨论】:

    • 感谢您的反馈!不幸的是,这仍然没有成功。我将 navigationController?.hidesBarsOnTap = true 放在 viewDidLoad、viewWillAppear 和 tappedScreen 中,但都没有这样做。还有其他建议吗?
    • 这确实有效!但是..这仅在我在 viewWillAppear 中设置并且函数 tappedScreen() 无法更改隐藏的值时才有效。我们很接近了!我最终还需要为底部工具栏设置相同的功能。
    • 所以当我想要隐藏或显示导航栏时,我已经为不同的场景组合了一个小算法。我可以点击并观察每个场景的工作情况,但现在唯一不起作用的是 navBar.hidden 只能工作一次,它不能继续切换..我需要解决这个问题。
    • 但我做了测试,它在 tappedScreen 功能中工作!请输入您的代码以了解更多信息。例如哪个语句用于取消隐藏导航栏?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多