Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
UITextView水平和垂直视图;Swift中光标位置正确的垂直滚动条_Swift_Uiscrollview_Uitextview_Horizontal Scrolling_Vertical Scrolling - Fatal编程技术网

UITextView水平和垂直视图;Swift中光标位置正确的垂直滚动条

UITextView水平和垂直视图;Swift中光标位置正确的垂直滚动条,swift,uiscrollview,uitextview,horizontal-scrolling,vertical-scrolling,Swift,Uiscrollview,Uitextview,Horizontal Scrolling,Vertical Scrolling,我正在从事一个需要使UITextView水平滚动的项目。问题陈述定义如下 我曾尝试将UITextview放在水平滚动的滚动视图中,正如其他类似的堆栈溢出问题解决方案中所建议的那样,当滚动正常工作时,存在与光标位置相关的多个问题,如: 动态设置UITextView的宽度以匹配内容最大行的宽度(可实现) 当内容增加或减少时,即在同一行中添加内容或在同一行之间删除内容时,光标不显示在屏幕上,UITextView无法完美地处理光标位置。光标跳到行开始处并返回到当前位置,并且在屏幕上不可见 UIText

我正在从事一个需要使UITextView水平滚动的项目。问题陈述定义如下

我曾尝试将UITextview放在水平滚动的滚动视图中,正如其他类似的堆栈溢出问题解决方案中所建议的那样,当滚动正常工作时,存在与光标位置相关的多个问题,如:

  • 动态设置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