iphone x中带有intrinsicContentSize的inputAccessoryView不起作用

Posted

技术标签:

【中文标题】iphone x中带有intrinsicContentSize的inputAccessoryView不起作用【英文标题】:inputAccessoryView with intrinsicContentSize in iphone x not working 【发布时间】:2018-02-28 13:26:56 【问题描述】:

请不要投反对票,我会尽力解释问题。

我有一个 InputAccessoryView,它在 iphone x 之前工作正常,在 iphone x 中,我的 inputAssesoryView 显示在布局指南下方的最底部。我找到了以下解决方案 inputAccessoryView Iphone X

按照上面链接的想法后,我可以将我的文本字段放在布局 guid 上方,但它变得无响应。这是因为没有为 inputAccessoryView 的视图定义帧大小。

class ChatInputContainerView: UIView, UITextFieldDelegate 

override var intrinsicContentSize: CGSize 
        return CGSize.zero
    

required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

lazy var inputTextField: UITextField = 
        let textField = UITextField()
        textField.placeholder = "Enter message..."
        textField.translatesAutoresizingMaskIntoConstraints = false
        textField.delegate = self
        return textField
    ()

override init(frame: CGRect) 
    super.init(frame: frame)
    autoresizingMask = .flexibleHeight

    self.inputTextField.leftAnchor.constraint(equalTo: rightAnchor, constant: 8).isActive = true

        self.inputTextField.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor).isActive = true
        self.inputTextField.rightAnchor.constraint(equalTo: leftAnchor).isActive = true
        self.inputTextField.heightAnchor.constraint(equalTo: heightAnchor).isActive = true





以下是我使用 inputAccessory 视图的控制器

class chatController: UITextFieldDelegate 


override func viewDidLoad() 
        super.viewDidLoad()


lazy var inputContainerView: ChatInputContainerView = 
       // let chatInputContainerView = ChatInputContainerView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50))

        let chatInputContainerView = ChatInputContainerView()
        chatInputContainerView.chatLogController = self
        return chatInputContainerView
    ()

override var inputAccessoryView: UIView? 
        get 

           return inputContainerView
        
    

 override var canBecomeFirstResponder : Bool 
        return true
    


以前我使用以下代码来获取 InputAccessoryView 的大小,它将视图放置在底部并固定高度。

let chatInputContainerView = ChatInputContainerView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50))

但现在我正在使用以下设置无法正常工作的 inputAccessoryView,视图内的文本字段变得无响应,因为父视图没有定义大小。

override var intrinsicContentSize: CGSize 
            return CGSize.zero
        
 autoresizingMask = .flexibleHeight

在下图中,您可以看到我的所有控件现在都位于 safeAreaLayout 上方,但它们变得无响应。 sample image

如果您不明白,请告诉我。请帮助提前谢谢你。

【问题讨论】:

有点晚了,你可能想检查一下:github.com/29satnam/InputAccessoryView @SatnamSync 对于正确的事情永远不会迟到。感谢您提供此存储库。 【参考方案1】:

尝试将顶部锚点添加到您的“inputTextField”

self.inputTextField.topAnchor.constraint(equalTo: topAnchor).isActive = true

我可能错了,但不知道顶部在哪里,“ChatInputContainerView”的高度将为零。

【讨论】:

它有点工作,但 inputContainerView 被挤压检查此图像link。如何增加 InputAccessoryView 的大小? 我尝试增加 inputTextField 的字体大小,但 inputAccessoryView 的大小仍然相同。感谢@Landon 的帮助 工作正常问题已解决。按钮被挤压是因为我正在使用 UIImageView 并且 contentMode 属性没有设置这就是为什么加号图标被挤压。

以上是关于iphone x中带有intrinsicContentSize的inputAccessoryView不起作用的主要内容,如果未能解决你的问题,请参考以下文章

计算 iPhone 文档中带有扩展名的文件数

iPhone 中带有文本检测功能的增强现实引擎

利用map对pandas中带有万的字符处理

SWIFT 中带有自定义参数的发布请求

ggplot 在不同的 data.frames 中带有 x 和 y 变量,带有 For-Loop

IOS中带有左右箭头的UIScrollView