iOS Swift:隐藏和取消隐藏导航栏和工具栏

时间:2015-09-14 20:53:37

标签: ios swift

专家,

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

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 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

我没有在做屏幕截图,但是我有类似的需求-我有一个viewController,其底部有一个UIToolbar,有时我想隐藏它。我为其创建了出口。并使用

@IBOutlet weak var toolBar: UIToolbar!


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

,但是在窗口底部仍然为工具栏分配了空间;并且如果scrollView中紧挨着的项目足够大,那么很明显那里仍然有某些东西会阻塞空间。

我通过选择工具栏并使用Embed-> Stack View解决了此问题。确保并调整stackview的约束,将每个顶部,底部,左侧和右侧设置为0。现在,同一行代码将隐藏工具栏,并且由于它位于UIStackView中,因此不再占用任何空间。

Hierarchy Info

您应该能够执行相同操作;隐藏工具栏,然后捕捉图像。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

此后,只需在代码中的特定位置使用此(下)行即可  您的工具栏将被永久删除:

self.tabBarController?.tabBar.isHidden = true

答案 4 :(得分:0)

我曾经遇到过同样的问题,但是我尝试了您的解决方案,但是那是错误的,我想您正在尝试解决内置在工具栏中的默认导航控制器,而您需要解决在故事中创建的自己的工具栏板。我按照以下方法解决了问题

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

答案 5 :(得分:0)

Swift 5.1

隐藏工具栏为

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