Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有inputAccessoryView的Swift问题_Ios_Swift_Swift3 - Fatal编程技术网

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应用程序中的模式。如果您能提供任何帮助或指导,以帮助我实现这一点,将不胜感激。非常感谢。