如何在 NavigationController 和 UITabbar 上方显示 UIView?
How to display an UIView above NavigationController and UITabbar?
我正在尝试创建一个自定义 Actionsheet 控制器(因为我希望它与 sheet 甚至在 iPad 上的操作相似)。我在我的项目中使用 XIB 来加载视图。
我有一个 View Controller A
,我想从底部显示一个自定义 Table 视图(只是为了模仿 actionSheet 行为)。但是当我通过将它添加到我的视图控制器 A 中的自定义视图来这样做时,视图保持在该视图控制器的 NavigationController 和 UITababar 下方。
let vc = CustomActionTableViewController(nibName: "CustomActionTableViewController", bundle: nil)
self.addChildViewController(vc)
self.actionView.addSubview(vc.view)
vc.didMove(toParentViewController: self)
let horzConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[childView]|", options: [], metrics: nil, views: ["childView": vc.view])
let vertConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|[childView]|", options: [], metrics: nil, views: ["childView": vc.view])
view.addConstraints(horzConstraints)
view.addConstraints(vertConstraints)
vc.view.translatesAutoresizingMaskIntoConstraints = false
我想将它添加到视图中,这样即使在导航控制器和 UITabbar 上我也可以实现透明背景。
我怎样才能做到这一点。此外,如何创建用于 AirPods 连接的类似底部视图的卡片?可以使用 Apple 的 UIKit 或任何库来模仿这种视图吗?
你应该 present
这个 ViewController
和 modalPresentationStyle
作为 .overFullScreen
let vc = CustomActionTableViewController(nibName: "CustomActionTableViewController", bundle: nil)
vc.modalPresentationStyle = .overFullScreen
self.present(vc, animated: true, completion: nil)
您可以将 CustomActionTableViewController
的 view
的背景 color
设置为黑色,并更改 alpha
值以设置透明度。
import UIKit
class SetupSheet: UIViewController {
var content: UIView!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.6)
}
override func viewDidAppear(_ animated: Bool) {
displaySetupSheet()
}
private func displaySetupSheet() {
content.frame = CGRect(x: 8, y: view.frame.maxY, width: view.bounds.width - 16 , height: view.bounds.height / 2)
content.backgroundColor = .white
content.layer.cornerRadius = 30
self.view.addSubview(content)
UIView.animate(withDuration: 0.2, delay: 0.0, options: UIView.AnimationOptions.transitionCurlUp) {
self.content.frame.origin.y -= (self.view.bounds.height / 2) + 16
}
}
}
我知道这个 post 有点老了,但我尝试了很多东西,这可能会对某些人有所帮助。这是一个完成的可重复使用的“Airpod”样式设置 sheet。它是一个视图控制器,因此您可以使用 present()
显示它。初始化时,将包含要显示的任何内部内容的 UIView 分配给内容。 Here's a pic used in my app
我正在尝试创建一个自定义 Actionsheet 控制器(因为我希望它与 sheet 甚至在 iPad 上的操作相似)。我在我的项目中使用 XIB 来加载视图。
我有一个 View Controller A
,我想从底部显示一个自定义 Table 视图(只是为了模仿 actionSheet 行为)。但是当我通过将它添加到我的视图控制器 A 中的自定义视图来这样做时,视图保持在该视图控制器的 NavigationController 和 UITababar 下方。
let vc = CustomActionTableViewController(nibName: "CustomActionTableViewController", bundle: nil)
self.addChildViewController(vc)
self.actionView.addSubview(vc.view)
vc.didMove(toParentViewController: self)
let horzConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[childView]|", options: [], metrics: nil, views: ["childView": vc.view])
let vertConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|[childView]|", options: [], metrics: nil, views: ["childView": vc.view])
view.addConstraints(horzConstraints)
view.addConstraints(vertConstraints)
vc.view.translatesAutoresizingMaskIntoConstraints = false
我想将它添加到视图中,这样即使在导航控制器和 UITabbar 上我也可以实现透明背景。
我怎样才能做到这一点。此外,如何创建用于 AirPods 连接的类似底部视图的卡片?可以使用 Apple 的 UIKit 或任何库来模仿这种视图吗?
你应该 present
这个 ViewController
和 modalPresentationStyle
作为 .overFullScreen
let vc = CustomActionTableViewController(nibName: "CustomActionTableViewController", bundle: nil)
vc.modalPresentationStyle = .overFullScreen
self.present(vc, animated: true, completion: nil)
您可以将 CustomActionTableViewController
的 view
的背景 color
设置为黑色,并更改 alpha
值以设置透明度。
import UIKit
class SetupSheet: UIViewController {
var content: UIView!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.6)
}
override func viewDidAppear(_ animated: Bool) {
displaySetupSheet()
}
private func displaySetupSheet() {
content.frame = CGRect(x: 8, y: view.frame.maxY, width: view.bounds.width - 16 , height: view.bounds.height / 2)
content.backgroundColor = .white
content.layer.cornerRadius = 30
self.view.addSubview(content)
UIView.animate(withDuration: 0.2, delay: 0.0, options: UIView.AnimationOptions.transitionCurlUp) {
self.content.frame.origin.y -= (self.view.bounds.height / 2) + 16
}
}
}
我知道这个 post 有点老了,但我尝试了很多东西,这可能会对某些人有所帮助。这是一个完成的可重复使用的“Airpod”样式设置 sheet。它是一个视图控制器,因此您可以使用 present()
显示它。初始化时,将包含要显示的任何内部内容的 UIView 分配给内容。 Here's a pic used in my app