Как отключить вертикальную прокрутку в UITextView? - PullRequest
0 голосов
/ 28 июня 2019

Я просто хочу отключить вертикальную прокрутку в моем UITextView , сохраняя горизонтальную прокрутку .

Я нашел здесь несколько похожих вопросов, однако ни один из них, похоже, не работал для меня. Я попробовал:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let origin: CGPoint = scrollView.contentOffset
    scrollView.contentOffset = CGPoint(x: origin.x, y: 0.0)
}

func makeTextView() {
    textView = UITextView()
    textView.frame = CGRect(x: 0, y: 50, width:self.view.frame.size.width, height:50)
    scrollView.addSubview(textView)
    NSLayoutConstraint.activate([
        textView.heightAnchor.constraint(equalToConstant: 50),
        textView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        textView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
        ])
    scrollViewDidScroll(textView)
}

Даже после этого UITextView все еще можно прокручивать в вертикальном направлении.

Here's an image of what my app and layout looks like, I hope it helps a little

Ответы [ 7 ]

0 голосов
/ 28 июня 2019

UITextView является подклассом UIScrollView, поэтому вы можете установить textView contentSize следующим образом:

textView.contentSize = CGSize(width: , height: )

При этом, если вам не нужна горизонтальная прокрутка, вы можете установить ширину textView, и это contentSize Ширина равна и наоборот для вертикальной прокрутки.

Вы можете использовать его в соответствии с вашими потребностями, чтобы ограничить одну из прокрутки.

0 голосов
/ 28 июня 2019

Примером этого может служить размещение вашего текстового представления внутри вида прокрутки.Рабочий пример этого может быть следующим:

class ViewController: UIViewController {

    private var scrollView: UIScrollView!
    private var textView: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        scrollView = {
            let scrollView = UIScrollView(frame: CGRect(x: 50.0, y: 150.0, width: 300.0, height: 100.0))
            scrollView.backgroundColor = UIColor.gray
            view.addSubview(scrollView)
            return scrollView
        }()

        textView = {
            let textView = UITextView(frame: .zero)
            scrollView?.addSubview(textView)
            textView.text = "Some fairly long text to be able to debug multiline and size being out of bounds of this item\nSome fairly long text to be able to debug multiline and size being out of bounds of this item\nSome fairly long text to be able to debug multiline and size being out of bounds of this item"
            textView.font = UIFont.systemFont(ofSize: 30)
            textView.backgroundColor = UIColor.green.withAlphaComponent(0.5)
            textView.sizeToFit()
            textView.isScrollEnabled = false
            return textView
        }()

        scrollView.contentSize = textView.bounds.size
        scrollView.delegate = self
    }

}

extension ViewController: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let origin: CGPoint = scrollView.contentOffset
        scrollView.contentOffset = CGPoint(x: origin.x, y: 0.0)
    }

}

Намеренно все это делается в коде для удобства чтения, но того же можно достичь с помощью ограничений.

0 голосов
/ 28 июня 2019

Ваш код верен, но вам также нужно установить делегат textView на makeTextView(), например, так:

textView.delegate = self

Кроме того, не забудьте реализовать UITextViewDelegate на вашем контроллере представления.Как это:

class MyViewController: UIViewController, UITextViewDelegate

0 голосов
/ 28 июня 2019

Существует два основных решения:

  1. В вашем контроллере View, если вы связали свое текстовое представление с торговой точкой

    textView.isScrollEnabled = false
    
  2. В раскадровке (если вы не кодируете пользовательский интерфейс)

    Вы можете установить опцию scrollEnabled с true на false в инспекторе Атрибутов в правой части экрана, если вы нажали на UITextView

0 голосов
/ 28 июня 2019

для вертикальной прокрутки swift 4:

    let origin: CGPoint = scrollView.contentOffset
    scrollView.contentOffset = CGPoint(x: origin.x, y: 0.0)
}

или вы можете изменить его следующим образом:

textView.showsVerticalScrollIndicator = false

0 голосов
/ 28 июня 2019

Вы можете использовать следующий код, чтобы отключить прокрутку textview:

textView.isScrollEnabled = false

И добавить свой textView внутри UIScrollView.Это даст вам результат, который вы ожидали.

Horizontal Scroll View


Или Вы можете программно сделать следующее:

    var textView = UITextView()
    var scrollView = UIScrollView()
    func makeTextView() {
        scrollView.backgroundColor = .green
        textView.backgroundColor = .red

        textView.text = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda."
        textView.isScrollEnabled = false
        scrollView.frame =  CGRect(x: 0, y: 0, width:self.view.frame.size.width, height:50)
        textView.frame = CGRect(x: 0, y: 0, width:self.view.frame.size.width, height:50)

        view.addSubview(scrollView)
        scrollView.addSubview(textView)

        scrollView.translatesAutoresizingMaskIntoConstraints = false
        textView.translatesAutoresizingMaskIntoConstraints = false

        scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
        scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
        scrollView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor, constant: 0).isActive = true
        scrollView.heightAnchor.constraint(equalToConstant: 50).isActive = true

        textView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor, constant: 0).isActive = true
        textView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor, constant: 0).isActive = true
        textView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0).isActive = true
        textView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0).isActive = true
    }
0 голосов
/ 28 июня 2019

UITextView является подклассом UIScrollView, поэтому вы можете запретить прокрутку представления, установив для свойства isScrollEnabled значение false.

textView.isScrollEnabled = false

...