首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到我的inputAccesoryView的safeAreaLayoutGuide

到我的inputAccesoryView的safeAreaLayoutGuide
EN

Stack Overflow用户
提问于 2017-10-24 05:46:51
回答 3查看 464关注 0票数 0

因此,在新的iPhone X中,我的应用程序中的一些东西放在了错误的位置。在我的应用程序的底部,我有一个accesoryView,它基本上是一个带有文本字段和其他元素的UIView。我在新的iPhone X中看到了一些关于safeAreaLayoutGuide的东西,但我现在不知道如何在accessoryView中实现。因此,我正在尝试找到一个代码来在我的应用程序中实现它,这样safeArea就不再困扰我了。

这是inputAccesoryView的代码

代码语言:javascript
复制
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

    }
}

谢谢你的帮助!

EN

回答 3

Stack Overflow用户

发布于 2017-10-25 10:02:55

正如我所想的,您所需要做的就是在指出约束之前访问safeAreaLayoutGuide类。在您的例子中,您需要像这样更改约束:

代码语言:javascript
复制
self.inputTextField.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true

转换成如下的约束:

代码语言:javascript
复制
self.inputTextField.centerYAnchor.constraint(equalTo: containerView.safeAreaLayoutGuide.centerYAnchor).isActive = true

让我知道进展如何。

票数 0
EN

Stack Overflow用户

发布于 2017-10-29 02:23:55

好的,将这段代码粘贴到lazy var

代码语言:javascript
复制
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中呈现它并设置约束:

代码语言:javascript
复制
let dummyView = UIView()
    dummyView.backgroundColor = .white
    dummyView.translatesAutoresizingMaskIntoConstraints = false

现在设置约束:

代码语言:javascript
复制
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的错误...我希望这能帮到你。

票数 0
EN

Stack Overflow用户

发布于 2017-10-29 19:51:50

我希望您的代码只需为inputTextField和其他需要的元素添加此底部约束,并将containerView CGRect frame height设置为100:

代码语言:javascript
复制
self.inputTextField.bottomAnchor.constraint(equalTo: containerView.safeAreaLayoutGuide.bottomAnchor).isActive = true

我想你可以删除:

代码语言:javascript
复制
self.inputTextField.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46899044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档