Вертикальное выравнивание изображений в ScrollView swift 3

#ios #swift #xcode #uiscrollview

#iOS #swift #xcode #uiscrollview

Вопрос:

Я пытаюсь выровнять свои изображения по вертикали в моем ScrollView. К сожалению, я не могу понять, в чем проблема. Я думаю, что это что-то математическое, и это не моя сильная сторона. 🙁

Я надеюсь, что кто-нибудь сможет мне помочь с этой проблемой. Я также предоставлю свой код и изображение проблемы ниже:

 //
//  muscleListVC.swift
//  ActiveRest
//
//  Created by Fhict on 04/10/16.
//  Copyright © 2016 Kevin Vugts. All rights reserved.
//

import UIKit

class muscleListVC: UIViewController {

    var images = [UIImageView]()

    @IBOutlet weak var scrollView: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()



        print("Count: (images.count)")

    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        var contentHeight: CGFloat = 0.0
        let scrollHeight = scrollView.frame.size.height

        for x in 0...4 {

            let image = UIImage(named: "muscle(x).png")
            let imageView = UIImageView(image: image)
            images.append(imageView)

            var newX: CGFloat = 0.0
            newX = scrollHeight / 4   scrollHeight * CGFloat(x) / 4
            print("the size is (newX)")
            contentHeight  = newX

            scrollView.addSubview(imageView)
            imageView.frame = CGRect(x: 0, y: newX, width: view.frame.size.width, height: 166)

            print("the content height: (contentHeight)")
            scrollView.contentSize = CGSize(width: scrollView.frame.size.width, height: contentHeight)

        }
        scrollView.clipsToBounds = false
    }
}
  

введите описание изображения здесь

Большое вам спасибо! <3

Комментарии:

1. Не понимаю вашей проблемы, что не так в предоставленном изображении?

2. @BharatModi изображения должны быть в верхней позиции 0. В настоящее время они расположены немного ниже верхней части рамки.

3. Какие ограничения вы установили для ImageView, а также каковы ваши фактические требования, если количество изображений является динамическим, и вам нужно, чтобы они прокручивались по вертикали, тогда почему бы вам не использовать TableView?

4. И я предлагаю не устанавливать размер высоты / содержимого прокрутки вручную, пусть автоматический макет сам вычисляет его на основе содержимого внутри него.

5. @BharatModi ограничения установлены для всех краев экрана. Таким образом, он будет соответствовать всем размерам мобильных устройств. Количество изображений динамическое, да. Я хотел бы использовать вид прокрутки для этой цели, если это возможно. : D

Ответ №1:

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

 override func viewDidLoad() {

        super.viewDidLoad()

        let numberOfImages = 5
        let imageViewHeight:CGFloat = 166.0
        scrollView.contentSize = CGSize(width: view.frame.size.width, height: imageViewHeight*(CGFloat)(numberOfImages))

        var newY:CGFloat = 0

        for x in 0...(numberOfImages-1) {

            let image = UIImage(named: "muscle(x).png")
            let imageView = UIImageView(image: image)
            images.append(imageView)
            imageView.frame = CGRect(x: 0, y: newY, width: view.frame.size.width, height: imageViewHeight)
            newY = newY   CGFloat(imageViewHeight)
            scrollView.addSubview(imageView)

        }


    }
  

Комментарии:

1. Привет, сэр, это почти то, что я ищу, за исключением одной вещи. Изображение 4 не отображается. и он все еще не в правильном положении. (y: 0)

2. Также прокрутка исчезла

3. У вас есть пять изображений?

4. Я решил это: у меня есть 5 изображений, которые я добавил в эту строку кода:

5. Звучит неплохо. Я также рекомендую вам прочитать это руководство , в котором очень хорошо объясняется UIScrollView с автозапуском.