Я работаю над проектом, в котором мне нужно сделать UITextView с горизонтальной прокруткой. Формулировка проблемы определена ниже
Я попытался поместить UITextview в ScrollView для горизонтальной прокрутки, как было предложенов другом подобном решении вопроса о переполнении стека, в то время как прокрутка работает, есть несколько проблем, связанных с положением курсора, таких как:
- Динамическая установка ширины UITextView в соответствии с шириной самой большой строки контента (достижимо)
- Курсор не отображается на экране при увеличении или уменьшении содержимого, т.е. при добавлении содержимого в той же строке или удалении содержимого между ними UITextView не обрабатывает положение курсора, курсор отлично переходит на начало строки и возвращается к текущемуположение, и не отображается на экране.
- UITextView должен иметь возможность прокрутки только по горизонтали или вертикали. (Необходимо отключить диагональную прокрутку).
Прикрепление текущего кода яэкспериментируя, такжепробовал другие ответы на подобные вопросы, не работает.: * 10101
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()
}
Вот так выглядит мой вывод