Ios 可调整大小,然后可滚动UITextView,如电报
我想创建UITextView,它可以像Telegram上的一样同时调整大小和滚动,Instagram或Whats应用程序,允许UITextView增长到或8行,如果添加更多文本,则可以滚动。我可以使UITextView增长到5行,但如果它们是更多文本,则由于isScroll属性被禁用,我无法看到 我的UITextView位于UIView内部,左右两侧各有两个按钮,如果可能的话,我更愿意通过Constraint完成,如果不通过代码也可以Ios 可调整大小,然后可滚动UITextView,如电报,ios,swift,autolayout,uitextview,Ios,Swift,Autolayout,Uitextview,我想创建UITextView,它可以像Telegram上的一样同时调整大小和滚动,Instagram或Whats应用程序,允许UITextView增长到或8行,如果添加更多文本,则可以滚动。我可以使UITextView增长到5行,但如果它们是更多文本,则由于isScroll属性被禁用,我无法看到 我的UITextView位于UIView内部,左右两侧各有两个按钮,如果可能的话,我更愿意通过Constraint完成,如果不通过代码也可以 您可以通过以下步骤实现预期结果: 将textView委托分配
您可以通过以下步骤实现预期结果: 将textView委托分配给控制器 默认禁用文本视图滚动 在textViewDidChange委托方法上,根据textView框架测量文本高度 为文本视图指定适当的高度,如果内容超过案例8行中的最大高度,则启用滚动 下面我附上代码片段,它可能会帮助您:
let commentViewMinHeight: CGFloat = 45.0
let commentViewMaxHeight: CGFloat = 120.0 //In your case it should be 8 lines
func textViewDidChange(_ textView: UITextView) {
//Calculate text height
let size = textView.sizeThatFits(CGSize(width: textView.frame.size.width, height: CGFloat.greatestFiniteMagnitude))
textViewHeightConstraint.constant = size.height.clamped(to: commentViewMinHeight...commentViewMaxHeight)
if textView.contentSize.height < commentViewMaxHeight {
textView.setContentOffset(CGPoint.zero, animated: false)
if textView.isScrollEnabled {
textView.isScrollEnabled = false
}
} else {
if !textView.isScrollEnabled {
textView.isScrollEnabled = true
}
}
}
extension Comparable {
func clamped(to limits: ClosedRange<Self>) -> Self {
return min(max(self, limits.lowerBound), limits.upperBound)
}
}
您可以通过以下步骤实现预期结果: 将textView委托分配给控制器 默认禁用文本视图滚动 在textViewDidChange委托方法上,根据textView框架测量文本高度 为文本视图指定适当的高度,如果内容超过案例8行中的最大高度,则启用滚动 下面我附上代码片段,它可能会帮助您:
let commentViewMinHeight: CGFloat = 45.0
let commentViewMaxHeight: CGFloat = 120.0 //In your case it should be 8 lines
func textViewDidChange(_ textView: UITextView) {
//Calculate text height
let size = textView.sizeThatFits(CGSize(width: textView.frame.size.width, height: CGFloat.greatestFiniteMagnitude))
textViewHeightConstraint.constant = size.height.clamped(to: commentViewMinHeight...commentViewMaxHeight)
if textView.contentSize.height < commentViewMaxHeight {
textView.setContentOffset(CGPoint.zero, animated: false)
if textView.isScrollEnabled {
textView.isScrollEnabled = false
}
} else {
if !textView.isScrollEnabled {
textView.isScrollEnabled = true
}
}
}
extension Comparable {
func clamped(to limits: ClosedRange<Self>) -> Self {
return min(max(self, limits.lowerBound), limits.upperBound)
}
}
的答案很好,但我想对其进行一点增强并添加一些动画:
你需要的步骤
获取文本视图的出口
添加高度约束并为其获取出口
实现textView的textViewDidChange委托方法
在textViewDidChange中
使用textView.sizeThatFitssize计算新高度
将高度约束常量设置为新高度
[可选]设置约束更改的动画,使其更便于用户使用
这里有一个例子
的答案很好,但我想对其进行一点增强并添加一些动画:
你需要的步骤
获取文本视图的出口
添加高度约束并为其获取出口
实现textView的textViewDidChange委托方法
在textViewDidChange中
使用textView.sizeThatFitssize计算新高度
将高度约束常量设置为新高度
[可选]设置约束更改的动画,使其更便于用户使用
这里有一个例子