После прочтения вашего требования, наиболее подходящим виджетом пользовательского интерфейса будет UICollectionView
.
Вот несколько моментов, которые помогут скрыть ваше требование.
1.Определение размера ячейки
Возможно, вы захотите показать связанные с вопросом и ответом представления во всем представлении, в этом случае представление вашей коллекции будет прикреплено к top
, bottom
, left
,right
с ограничением, и размер вашей ячейки будет равен размеру границы представления коллекции.
Реализация делегата UICollectionViewFlowLayoutDelegate
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
return collectionView.bounds.size
}
2.Включить пейджинг
Включить пейджинг в collectionView, чтобы прокрутка не оставалась ни при каком разрыве (т. Е. Прокрутка остановилась между двумя вопросительными ячейками).
collectionView.isPagingEnabled = true
3.Блокировка направления прокрутки (только прокрутка вправо)
Если вы нацелились на iOS 11.0+
, у вас может быть вид @ UICollectionViewDragDelegate
( appledoc ), который обеспечит богатый наборфункциональность для достижения этой цели.
В противном случае я хотел бы предложить вам использовать следующие
public func scrollViewDidScroll(_ scrollView: UIScrollView)
, которые будут уведомлять вас о каждом отдельном пользователе, выполняющем прокрутку в вашем CollectionView
.Это метод из UIScrollView
и UICollectionView
, унаследованный от UIScrollView
.
var lastOffsetX = -1
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
// for the first time only
if lastOffset < 0 {
lastOffsetX = scrollView.contentOffset.x
return
}
if lastOffset > scrollView.contentOffset.x {
// stick to the right most position -- not enabling the user to go left
scrollView.contentOffset.x = lastOffset
} else {
// take the user ahead to the right position
lastOffset = scrollView.contentOffset.x
}
}
. При такой обработке вы можете столкнуться с проблемой, заключающейся в том, что установка contentOffset внутри scrollViewDidScroll
может привести к запускуscrollViewDidScroll
метод.Если вы сталкиваетесь с этим, вы можете взглянуть на этот ответ .Конечно, я не запускал этот код, но с несколькими исключениями, он должен работать.
Надеюсь, это поможет, Счастливого кодирования.