iOS Swift: 隐藏和显示导航栏和工具栏

3

专家们,

我正在使用以下代码在捕获屏幕视图之前隐藏工具栏和导航栏。然而,图像仍然显示了两个栏...我做错了什么吗?

func generateMeme() ->UIImage {
        // Hide toolbar and navbar
        self.navigationController?.navigationBarHidden = true
        self.navigationController?.toolbarHidden = true

        // Render view to an image
        UIGraphicsBeginImageContext(self.view.frame.size)
        self.view.drawViewHierarchyInRect(self.view.frame,afterScreenUpdates:true)
        let memedImage : UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        // Show toolbar and navbar
        self.navigationController?.navigationBarHidden = true
        self.navigationController?.toolbarHidden = true

        return memedImage
    }

谢谢

6个回答

5
我不是在做截屏,但我有类似的需求——我有一个带有 UIToolbar 底部的视图控制器,有时想要隐藏它。我创建了一个 outlet 到它,并使用了
@IBOutlet weak var toolBar: UIToolbar!


// later in the code where you don't want it visible anymore
toolBar.isHidden = true

但是,在窗口底部仍然保留有工具栏的空间;如果scrollView中的项目足够大,则很明显仍然有东西挡住了空间。
我通过选择工具栏并使用“嵌入”->“堆栈视图”来解决这个问题。确保调整堆栈视图的约束,将每个顶部、底部、左侧和右侧都设置为0。现在,同一行代码将隐藏工具栏,并且因为它在UIStackView中,它不再占用任何空间。

Hierarchy Info

你应该能够做到同样的事情:隐藏工具栏,然后拍摄照片。

2

Swift 5.1

隐藏工具栏将会是:

override func viewDidLoad() {
        super.viewDidLoad()       
        self.navigationController?.setToolbarHidden(true, animated: true
}

1

只需在代码的特定位置使用以下行,之后您的工具栏将被永久删除:

self.tabBarController?.tabBar.isHidden = true

1
我使用引用输出和隐藏属性解决了这个问题。以下是代码:
// Reference outlet for Tool Bar
@IBOutlet weak var toolBar: UIToolbar!

//Reference outlet for Navigation Bar
@IBOutlet weak var navBar: UINavigationBar!

//Generate meme
func generateMeme() ->UIImage {


    // Hide toolbar and navbar
    self.toolBar.hidden = true
    self.navBar.hidden = true

    // Render view to an image
    UIGraphicsBeginImageContext(view.frame.size)
    view.layer.renderInContext(UIGraphicsGetCurrentContext())
    let memedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    //Show tool and nav bars
    self.toolBar.hidden = false
    self.navBar.hidden = false


    return memedImage
}

0
    func getScreenShot() -> UIImage {
            UIGraphicsBeginImageContext(view.frame.size)
            view.layer.renderInContext(UIGraphicsGetCurrentContext())
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()

            UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
            return image
        }

这应该隐藏导航栏和工具栏。您可以在照片中找到图片。


尝试清理你的项目。我也有一个导航栏,但它没有捕捉到导航栏。 - ridvankucuk

0

我曾经遇到了同样的问题,尝试了您提供的解决方案,但是问题在于,我认为您试图寻址默认的导航控制器内置工具栏,而实际上您需要寻址您在故事板中创建的自己的工具栏。 我采取以下步骤解决了这个问题

  1. 从我的工具栏创建一个出口到视图控制器
     @IBOutlet weak var toolbarView: UIToolbar!
  • 将其隐藏
  •  self.navigationController?.isNavigationBarHidden = true
     self.toolbarView.isHidden = true
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接