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不起作用的主要内容,如果未能解决你的问题,请参考以下文章