Как установить ширину содержимого в соответствии с размером устройства / родительской ширины? - PullRequest
0 голосов
/ 12 февраля 2019

Изображения в моем списке функций выглядят странно на телефонах меньшего размера, таких как iPhone 5s, iPhone 6 и т. Д.

РЕДАКТИРОВАТЬ : я использую UIScrollViewсделать это.:)

Я пытался добавить свой код в viewDidLayoutSubviews и viewWillLayoutSubviews, но, похоже, он не работает.

// 1-я попытка

override func viewDidLayoutSubviews() {
    featureScroll.contentSize = CGSize(width: self.view.bounds.width * CGFloat(featureArray.count), height: 300)
}

// 2-я попытка

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()()
    featureScroll.contentSize = CGSize(width: self.view.bounds.width * CGFloat(featureArray.count), height: 300)
}

РЕДАКТИРОВАТЬ : // как я загружаю изображения в featureScroll

let feature1 = ["image": "ic_home1"]
let feature2 = ["image": "ic_home2"]
let feature3 = ["image": "ic_home3"]

var featureArray = [Dictionary<String, String>](


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    featureArray = [feature1, feature2, feature3]
    featureScroll.isPagingEnabled = true
    featureScroll.contentSize = CGSize(width: self.view.bounds.width * CGFloat(featureArray.count), height: 300)
    featureScroll.showsHorizontalScrollIndicator = false

    featureScroll.delegate = self

    loadFeatures()


}

func loadFeatures(){
    for (index, feature) in featureArray.enumerated() {
        if let featureView = Bundle.main.loadNibNamed("Feature", owner: self, options: nil)?.first as? FeatureView {

            featureView.featureImage.image = UIImage(named: feature["image"]!)

            featureScroll.addSubview(featureView)

            featureView.frame.size.width = featureScroll.bounds.size.width
            featureView.frame.origin.x = CGFloat(index) * featureScroll.bounds.size.width


        }
    }

}


func scrollViewDidScroll(_ featureScroll: UIScrollView) {
    let page = featureScroll.contentOffset.x / featureScroll.frame.size.width
    featurePageControl.currentPage = Int(page)
}

Ссылка ниже показывает фактические результатыЯ хочу избавиться от пробелов, как мне поступить?

-> https://imgur.com/8AUZh4U.png

Заранее благодарю за помощь!:)

1 Ответ

0 голосов
/ 14 февраля 2019

Теория

ScrollView должен знать, где он находится (его кадр = позиция и размер) и размер его содержимого (которое будет прокручиваться).

Вертикальный стек должен знать свою позицию (x, y) и ширину.Его высота определяется его содержимым и настройками (например, расстояние между элементами).


Пример

Итак, для ваших нужд необходимо иметь scrollView на весь экран и стопкуВертикальные виды внутри вы можете сделать что-то вроде этого (только с ограничениями, ничего не устанавливается программно) :

enter image description here enter image description here


UIScrollView:

Ограничения сверху, впереди, сзади, снизу от 0 до его суперпредставления

enter image description here


Вертикальный UIStackView:

Начальные, конечные, ограничения в 0 для представления ViewController.Сверху, впереди, сзади, снизу = 0 до его суперпредставления (scrollView)> это сделает прокрутку ScrollView ..., когда содержимое stackView больше высоты scrollView

enter image description here


Элементы StackView:

В вашем случае я думаю, что это набор изображений ViewView.Каждый элемент должен установить свою собственную высоту.

enter image description here

Сумма высот ImageView (и интервал, установленный в stackView) будет определять высоту stackViewкоторая будет определять высоту содержимого scrollView (и, следовательно, высоту прокрутки).

Для получения дополнительной информации о UIScrollView см. документацию здесь

Для получения дополнительной информации UIStackView см. документацию здесь

...