Отключение горизонтальной прокрутки из UIScrollView Swift

Посмотреть Свиток

у меня есть UIScrollView, с ограничениями left: 0, top: 0, right: 0, bottom: 0

Вид Прокрутки Внутри

в верхней части этой UIScrollView это UIImageView С ограничениями left: 0, top: 0, right: 0, height: 200

под этим у меня есть UITextView С ограничениями left: 0, top: 0, right: 0, bottom: 0

это означает UITextView изменит размер относительно его содержимого, и я установил scrollingEnabled to false на UITextView.

так, когда Я бегу, он почти отлично работает.

одна проблема-это UIImageView - примерно на 10% больше, чем фактическая ширина экрана. Таким образом, горизонтальная прокрутка включена.

я попытался добавить строки

imageView.frame = CGRect(0, 0, screenSize.width, 200)
scrlView.contentSize.width = screenSize.width

но это не имеет никакого значения. Я все еще могу прокручивать по горизонтали, и вид изображения по-прежнему занимает около 10% больше, чем фактическая ширина экрана.

примечание, Я не установил ширину экрана imageView в раскадровке, только программно.

какие идеи?

5 ответов


Как это

func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView.contentOffset.x>0 {
        scrollView.contentOffset.x = 0
    }
}

и, вы можете установить это свойство:

scrollImg.directionalLockEnabled = true

вышеизложенное проверяет только X в одном направлении (положительное движение). Чтобы предотвратить прокрутку влево/вправо:

func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView.contentOffset.x != 0 {
        scrollView.contentOffset.x = 0
    }
}

нет необходимости для направления.


func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.x = 0
}

это останавливает прокрутку scrollview в направлении переднего края.


Swift 4

Горизонтальная Блокировка Прокрутки

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.x != 0 {
        scrollView.contentOffset.x = 0
    }
}

вы можете изменить x на y для вертикальной прокрутки.

обязательно добавьте UIScrollViewDelegate следующим образом:

class MyViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet var scrollView: UIScrollView!

    ...
}

и установите делегат для ScrollView

scrollView.delegate = self

Если вы используете раскадровку и autolayout, то вы должны рассмотреть, как ScrollView работает в раскадровке с autolayout.

учитывать следующее.

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

  2. сделайте выход ширины и высоты

  3. добавьте свои подвиды в представление, добавленное в функцией ScrollView

обновите ширину до screenSize, например: 320 для iPhone5 или 4.

self.viewWidth = SCREEN_WIDTH;
[self.view updateConstraints];