因此,在新的iPhone X中,我的应用程序中的一些东西放在了错误的位置。在我的应用程序的底部,我有一个accesoryView,它基本上是一个带有文本字段和其他元素的UIView。我在新的iPhone X中看到了一些关于safeAreaLayoutGuide的东西,但我现在不知道如何在accessoryView中实现。因此,我正在尝试找到一个代码来在我的应用程序中实现它,这样safeArea就不再困扰我了。
这是inputAccesoryView的代码
lazy var inputContainerView: UIView = {
let containerView = UIView()
containerView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50)
containerView.translatesAutoresizingMaskIntoConstraints = false
containerView.backgroundColor = UIColor.white
containerView.addSubview(self.inputTextField)
containerView.addSubview(self.swiche)
containerView.addSubview(self.separatorLineView)
containerView.addSubview(self.uploadImageView)
//x,y,w,h
self.inputTextField.leftAnchor.constraint(equalTo: self.swiche.rightAnchor, constant: 4).isActive = true
self.inputTextField.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true
self.inputTextField.rightAnchor.constraint(equalTo: self.uploadImageView.leftAnchor, constant: 4).isActive = true
self.inputTextField.heightAnchor.constraint(equalTo: containerView.heightAnchor).isActive = true
self.inputTextField.backgroundColor = UIColor.clear
//x,y,w,h
self.swiche.leftAnchor.constraint(equalTo: containerView.leftAnchor, constant: 4).isActive = true
self.swiche.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true
self.swiche.heightAnchor.constraint(equalToConstant: 30).isActive = true
self.swiche.widthAnchor.constraint(equalToConstant: 55).isActive = true
//x,y,w,h
self.uploadImageView.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true
self.uploadImageView.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true
self.uploadImageView.widthAnchor.constraint(equalToConstant: 47).isActive = true
self.uploadImageView.heightAnchor.constraint(equalToConstant: 47).isActive = true
//x,y,w,h
self.separatorLineView.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true
self.separatorLineView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
self.separatorLineView.widthAnchor.constraint(equalTo: containerView.widthAnchor).isActive = true
self.separatorLineView.heightAnchor.constraint(equalToConstant: 1).isActive = true
return containerView
}()
//MARK: AccesoryView
override var inputAccessoryView: UIView? {
get {
return inputContainerView
}
}谢谢你的帮助!
发布于 2017-10-25 10:02:55
正如我所想的,您所需要做的就是在指出约束之前访问safeAreaLayoutGuide类。在您的例子中,您需要像这样更改约束:
self.inputTextField.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true转换成如下的约束:
self.inputTextField.centerYAnchor.constraint(equalTo: containerView.safeAreaLayoutGuide.centerYAnchor).isActive = true让我知道进展如何。
发布于 2017-10-29 02:23:55
好的,将这段代码粘贴到lazy var
override func didMoveToWindow() {
super.didMoveToWindow()
if #available(iOS 11.0, *) {
if let window = self.window {
self.bottomAnchor.constraintLessThanOrEqualToSystemSpacingBelow(window.safeAreaLayoutGuide.bottomAnchor, multiplier: 1.0).isActive = true
}
}
}现在你的视图是up safeAreaLayoutGuide...but在底部你可以看到tableview,因为没有背景(你的视图是up safeAreaLayoutGuide),为了纠正这个问题,我构建了一个白色的uiview,在inputTextField中呈现它并设置约束:
let dummyView = UIView()
dummyView.backgroundColor = .white
dummyView.translatesAutoresizingMaskIntoConstraints = false现在设置约束:
inputTextField.addSubview(dummyView)
dummyView.topAnchor.constraint(equalTo: inputTextField.bottomAnchor).isActive = true
dummyView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
dummyView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
dummyView.heightAnchor.constraint(equalToConstant: 50).isActive = true这就是黑客,但我认为这是Xcode的错误...我希望这能帮到你。
发布于 2017-10-29 19:51:50
我希望您的代码只需为inputTextField和其他需要的元素添加此底部约束,并将containerView CGRect frame height设置为100:
self.inputTextField.bottomAnchor.constraint(equalTo: containerView.safeAreaLayoutGuide.bottomAnchor).isActive = true我想你可以删除:
self.inputTextField.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = truehttps://stackoverflow.com/questions/46899044
复制相似问题