UITextView水平和垂直视图;Swift中光标位置正确的垂直滚动条
我正在从事一个需要使UITextView水平滚动的项目。问题陈述定义如下 我曾尝试将UITextview放在水平滚动的滚动视图中,正如其他类似的堆栈溢出问题解决方案中所建议的那样,当滚动正常工作时,存在与光标位置相关的多个问题,如:UITextView水平和垂直视图;Swift中光标位置正确的垂直滚动条,swift,uiscrollview,uitextview,horizontal-scrolling,vertical-scrolling,Swift,Uiscrollview,Uitextview,Horizontal Scrolling,Vertical Scrolling,我正在从事一个需要使UITextView水平滚动的项目。问题陈述定义如下 我曾尝试将UITextview放在水平滚动的滚动视图中,正如其他类似的堆栈溢出问题解决方案中所建议的那样,当滚动正常工作时,存在与光标位置相关的多个问题,如: 动态设置UITextView的宽度以匹配内容最大行的宽度(可实现) 当内容增加或减少时,即在同一行中添加内容或在同一行之间删除内容时,光标不显示在屏幕上,UITextView无法完美地处理光标位置。光标跳到行开始处并返回到当前位置,并且在屏幕上不可见 UIText
- 动态设置UITextView的宽度以匹配内容最大行的宽度(可实现)
- 当内容增加或减少时,即在同一行中添加内容或在同一行之间删除内容时,光标不显示在屏幕上,UITextView无法完美地处理光标位置。光标跳到行开始处并返回到当前位置,并且在屏幕上不可见
- UITextView应该只能水平或垂直滚动(需要禁用对角滚动)
class ViewController: UIViewController, UITextViewDelegate, UIScrollViewDelegate {
@IBOutlet weak var scroll:UIScrollView!
@IBOutlet weak var textView:UITextView!
var displayStr = ""
var strSize:CGRect!
var font:UIFont!
var maxSize:CGSize!
override func viewDidLoad() {
super.viewDidLoad()
displayStr = textView.text
textView.delegate = self
scroll.delegate = self
scroll.addSubview(textView)
textView.isEditable = true
textView.isScrollEnabled = false
maxSize = CGSize(width: 9999, height: 9999)
font = UIFont(name: "Menlo", size: 16)!
textView.font = font
updateWidth()
}
func updateWidth() {
strSize = (displayStr as NSString).boundingRect(with: maxSize, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font : font!], context: nil)
if strSize.width > self.view.frame.width {
textView.frame = CGRect(x: 0, y: 0, width: strSize.width + 50, height: view.frame.height+10)
}
scroll.frame = CGRect(x: 0, y: 100, width: view.frame.width, height: view.frame.height)
scroll.contentSize = CGSize(width: strSize.width + 30, height: strSize.height)
}
func textViewDidChange(_ textView: UITextView) {
updateWidth()
}
这就是我的输出的外观
如果其他帖子不能满足您的需要,那么可能会有很多重复的帖子。只需搜索
uitextview水平滚动
实际上,uitextview是UIScrollView的一个子类,因此不需要将它们嵌入到另一个子类中,只需尝试调整继承的属性即可。您可以根据需要调整contentSize