在 ViewController 中显示自定义 UIView
Posted
技术标签:
【中文标题】在 ViewController 中显示自定义 UIView【英文标题】:Displaying custom UIView in a ViewController 【发布时间】:2019-02-25 08:17:42 【问题描述】:我正在创建一个要在视图控制器中显示的 UIView。我创建了 UIView 并显示了,但我现在遇到的问题是:
当我在视图控制器中调用 UIView 时,我无法再与视图控制器的元素进行交互。我创建的CustomView
完全阻止了与我的视图控制器的交互,我希望能够与 UIViewController 进行交互。
我想隐藏状态栏,其中包括电池百分比和网络栏和其他内容,以便视图完全覆盖它们。我实现了一个代码来覆盖它们,但它返回一个错误。
下面是我的代码
class SliderView: CustomView
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var sliderImage: UIImageView!
@IBOutlet weak var sliderText: UILabel!
override func initialize()
super.initialize()
let name = String(describing: type(of: self))
let nib = UINib(nibName: name, bundle: .main)
nib.instantiate(withOwner: self, options: nil)
self.addSubview(self.containerView)
self.containerView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
self.containerView.topAnchor.constraint(equalTo: self.topAnchor),
self.containerView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
self.containerView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
])
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool
return sliderImage.frame.contains(point)
override var prefersStatusBarHidden: Bool
return true
// THIS THROWS an error 'Property does not override any property from its superclass'
我的 UIView 在我的 Viewcontroller 中被调用
weak var sliderView: SliderView!
override func loadView()
super.loadView()
let sliderView = SliderView()
self.view.addSubview(sliderView)
NSLayoutConstraint.activate([
sliderView.topAnchor.constraint(equalTo: self.view.topAnchor),
sliderView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
sliderView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
sliderView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
])
self.sliderView = sliderView
override func viewDidLoad()
super.viewDidLoad()
sliderView.sliderText.text = "HOOOOO WORKS"
【问题讨论】:
override var prefersStatusBarHidden: Bool return true
可能应该进入 viewcontroller 而不是 uiview。
至于第一点不确定。也许您的自定义视图覆盖了整个 uiviewcontroller 视图,因此捕获了用户触摸
正如@ioser 所说,prefersStatusBarHidden
是 UIViewController 的属性,而不是 UIView 的属性。这是您遇到的唯一问题,还是您实际上在处理 VC 和视图之间的交互时遇到了问题?
我认为override var prefersStatusBarHidden: Bool return true
是一个uiviewcontroller 属性,但第一个问题仍未解决@iOSer @JillevdW
CustomView
类有什么作用? (您正在继承 SliderView)
【参考方案1】:
NSLayoutConstraint.activate([
sliderView.topAnchor.constraint(equalTo: self.view.topAnchor),
sliderView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
sliderView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
sliderView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
])
您的自定义视图覆盖了整个UIViewController
。因此,无法与UIViewController
进行交互。
只需尝试将第二个约束替换为以下内容,以仅覆盖屏幕高度的一半:
sliderView.topAnchor.constraint.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -UIScreen.main.bounds.height*0.5)
这只是一个查看差异的建议,即不是解决方案。
【讨论】:
以上是关于在 ViewController 中显示自定义 UIView的主要内容,如果未能解决你的问题,请参考以下文章
IOS:将viewcontroller添加到ios中的自定义TabBar
IOS让返回按钮显示自定义标题而不是上个ViewController的title