Ios 带有inputAccessoryView的Swift问题
我有一个Ios 带有inputAccessoryView的Swift问题,ios,swift,swift3,Ios,Swift,Swift3,我有一个表视图,它有一个自定义的inputAccessoryView,我有表视图。键盘解除模式设置为。交互式。我将UIView子类化,并将该类创建为我的自定义inputAccessoryView 视图中有一个textView,我让它自动调整大小,直到达到一定的行数。这是我的代码: override var intrinsicContentSize: CGSize { DispatchQueue.main.async { let path = IndexPath(row:
表视图
,它有一个自定义的inputAccessoryView
,我有表视图。键盘解除模式
设置为。交互式
。我将UIView
子类化,并将该类创建为我的自定义inputAccessoryView
视图中有一个textView
,我让它自动调整大小,直到达到一定的行数。这是我的代码:
override var intrinsicContentSize: CGSize {
DispatchQueue.main.async {
let path = IndexPath(row: self.tableView.numberOfRows(inSection: 0) - 1, section: 0)
self.tableView.scrollToRow(at: path, at: .bottom, animated: true)
}
sendButton.frame.origin.y = self.frame.maxY - 5 - sendButton.frame.height
return CGSize(width: self.bounds.width, height: (textView.numberOfLines() < 10 ? textView.text.sizeForWidth(width: textView.frame.width, font: textView.font!).height : 254) + textView.frame.origin.y * 2)
}
func textViewDidChange(_ textView: UITextView) {
placeholderLabel.isHidden = !textView.text.isEmpty
if textView.numberOfLines() < 10 { // I defined numberOfLines() elsewhere
textView.isScrollEnabled = false
} else {
textView.isScrollEnabled = true
}
invalidateIntrinsicContentSize()
}
重写变量intrinsicContentSize:CGSize{
DispatchQueue.main.async{
让path=IndexPath(行:self.tableView.numberOfRows(第0节)-1,节:0)
self.tableView.scrollToRow(在:路径,在:。底部,动画:true)
}
sendButton.frame.origin.y=self.frame.maxY-5-sendButton.frame.height
返回CGSize(宽度:self.bounds.width,height:(textView.numberOfLines()<10?textView.text.sizeForWidth(宽度:textView.frame.width,字体:textView.font!)。高度:254)+textView.frame.origin.y*2)
}
func textViewDidChange(textView:UITextView){
Placeholder Label.isHidden=!textView.text.isEmpty
如果textView.numberOfLines()<10{//我在别处定义了numberOfLines()
textView.IsCrollenabled=false
}否则{
textView.IsCrollenabled=true
}
InvalidateIntriseContentSize()无效
}
.async{}
块用于在inputAccessoryView
高度增加时再次滚动到表格视图的底部
我的问题是,当我向下拖动tableView
以隐藏键盘时,tableView
运行滚动动画(异步async
块中的动画),而我不希望它滚动到底部。下面是正在发生的事情的一个例子
这几天来,我一直在努力让它以我想要的方式工作。有谁能向我解释一下为什么它不能像我希望的那样工作,以及我如何修复它
提前多谢 我解决了自己的问题!万岁
为此,我在ViewController
中为当前是否正在拖动/滚动tableView
创建了一个公共值。我使用UIScrollView
委托方法设置tableView
当前是否正在滚动:
scrollViewWillBeginDragging(_:)
and
scrollViewDidEndDragging(_:)
然后我将intrinsicContentSize
更改为:
override var intrinsicContentSize: CGSize {
if viewController.isDragging == false && textView.isFirstResponder {
DispatchQueue.main.async {
let path = IndexPath(row: self.tableView.numberOfRows(inSection: 0) - 1, section: 0)
self.tableView.scrollToRow(at: path, at: .bottom, animated: true)
}
}
sendButton.frame.origin.y = self.frame.maxY - 5 - sendButton.frame.height
return CGSize(width: self.bounds.width, height: (textView.numberOfLines() < 10 ? textView.text.sizeForWidth(width: textView.frame.width, font: textView.font!).height : 254) + textView.frame.origin.y * 2)
}
重写变量intrinsicContentSize:CGSize{
如果viewController.isDraging==false&&textView.isFirstResponder{
DispatchQueue.main.async{
让path=IndexPath(行:self.tableView.numberOfRows(第0节)-1,节:0)
self.tableView.scrollToRow(在:路径,在:。底部,动画:true)
}
}
sendButton.frame.origin.y=self.frame.maxY-5-sendButton.frame.height
返回CGSize(宽度:self.bounds.width,height:(textView.numberOfLines()<10?textView.text.sizeForWidth(宽度:textView.frame.width,字体:textView.font!)。高度:254)+textView.frame.origin.y*2)
}
与“视觉约束”无关。您好,我无法将自定义inputAccessoryView扩展到某个限制。我们希望实现的模式类似于WhatsApp、iMessage、Skype等iOS应用程序中的模式。如果您能提供任何帮助或指导,以帮助我实现这一点,将不胜感激。非常感谢。