如何在不像 Whatsapp 那样遮挡整个屏幕的情况下禁用表格视图?

Posted

技术标签:

【中文标题】如何在不像 Whatsapp 那样遮挡整个屏幕的情况下禁用表格视图?【英文标题】:How do I disable a tableview without obscuring the entire screen like in Whatsapp? 【发布时间】:2018-05-03 14:16:37 【问题描述】:

如何禁用表格视图而不像在 Whatsapp 中那样遮挡整个屏幕?这个想法是当SearchController 中的SearchBar 仍然为空时,tableview 会变暗。到SearchController,默认隐藏整个屏幕。使用obscuresBackgroundDuringPresentation,也会遮住整个屏幕。

我正在使用 Xcode 9.3 - Swift 4。

【问题讨论】:

【参考方案1】:

试试这个解决方案

1) 声明视图

let keyboardView  = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width  , height: UIScreen.main.bounds.height))

2) 在viewDidLoad中添加Notification Observer并查看颜色alpha

        keyboardView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)

2) 移除 Notification Observer 的使用

deinit 
    NotificationCenter.default.removeObserver(self)

3) 添加约束查看

func addConstraints() 
        view.addConstraint(NSLayoutConstraint(item: keyboardView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0))            
        view.addConstraint(NSLayoutConstraint(item: keyboardView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0))

        view.addConstraint(NSLayoutConstraint(item: keyboardView, attribute: .top, relatedBy: .equal, toItem: self.view.safeAreaLayoutGuide, attribute: .bottom, multiplier: 1, constant: 0))
        view.addConstraint(NSLayoutConstraint(item: keyboardView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute,multiplier: 1, constant: UIScreen.main.bounds.height))

    

4) 添加键盘显示和隐藏方法

@objc func keyboardWillShow(notification: NSNotification) 
        UIView.animate(withDuration: 0.1, animations:  () -> Void in

            self.storeCollectionView.addSubview(self.keyboardView)
             self.addConstraints()
        )
   

  @objc func keyboardWillHide(notification: NSNotification) 

        UIView.animate(withDuration: 0.1, animations:  () -> Void in

            self.keyboardView.removeFromSuperview()
        )

   

【讨论】:

谢谢。当我水平放置时,暗视图不会填满屏幕的其余部分。发生这种情况我可以做些什么改变? @OséiasRibeiro 请加我截图 dropbox.com/s/klpzhroe09a82ki/… 抱歉没有看到细节。我想保留 WhatsApp 中的取消按钮。 我进行了更改。它仍然有同样的问题。 StatusBar 的动画相对于视图也有延迟。当我转动 iPhone 时,我看到了这个。

以上是关于如何在不像 Whatsapp 那样遮挡整个屏幕的情况下禁用表格视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不打开 WhatsApp 的情况下向 WhatsApp 群组发送消息?

View被其它View遮挡显示出来

SearchResultsController 与 UINavigationItem 一起使用时会遮挡屏幕

每次从后台恢复应用程序时都会打开启动屏幕,如WhatsApp指纹屏幕

当应用程序从 WhatsApp 指纹屏幕等后台恢复时,每次打开启动画面

无论屏幕大小如何,如何让内容占据整个页面?