просмотр прокрутки ios с полноэкранным видео в качестве основного содержимого

#ios #swift #xcode #layout #scrollview

#iOS #swift #xcode #макет #просмотр прокрутки

Вопрос:

это макет, который я хочу достичь

Я пытаюсь выяснить, как заставить этот макет работать на разных экранах. я попытался получить высоту экрана и программно установить равную ей высоту слоя видео. Ограничения кнопки регулировки громкости составляют 25 от правого поля и 25 от нижней части видео. Проблема в том, что когда я пытаюсь запустить приложение, кнопка регулировки громкости отображается в правом среднем углу экрана, а не справа от нижнего угла. Кроме того, просмотры изображений перекрывают видео, а не отображаются под ним. Я предполагаю, что ограничения этих элементов отображают высоту слоя видео в раскадровке, а не высоту, которую я устанавливаю программно в ViewController.swift.

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

1. Привет! Просто добавьте ограничения VideoView к границам просмотров, а не к scrollViews, но добавьте его в качестве подвида ScrollView

Ответ №1:

Вы можете добиться более согласованного макета с помощью табличного представления и наличия раздела для полноэкранного видео, а остальные виды изображений — в другом разделе. Раздел для вашего видео будет иметь UIScreen.main.bounds.height высоту ячейки, чтобы вы могли иметь динамическую полноэкранную высоту независимо от устройства.

 class ViewController: UITableViewController {
    var arr: [[String]] = {
        var arr = [[String]]()
        arr.append(["Video"])
        var imageArr = [String]()
        for index in 1...20 {
            imageArr.append(String(index))
        }
        arr.append(imageArr)
        return arr
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        return arr.count
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arr[section].count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = arr[indexPath.section][indexPath.row]
        return cell
    }
    
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.section == 0 {
            return UIScreen.main.bounds.height
        } else {
            return 100
        }
    }
}
 

Что касается кнопки регулировки громкости, вы можете создать пользовательскую ячейку для раздела видео и загрузить ее в cellForRowAt метод. Убедитесь, что вы используете Autolayout , а не CGRect позиционируете его.

Ответ №2:

прежде всего, вы работаете с ScrollView, поэтому вам нужно присвоить каждому элементу на вашем экране высоту, чтобы вы присвоили высоте видеоэкрана «Фиксированную высоту», затем вы также присвоите своей кнопке фиксированную высоту и подключите ее с конца, начала, снизу и сверху, и я думаю, что это сработаетс вами, и если возникнет какая-либо проблема, не стесняйтесь комментировать ее

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

1. если я присвою видеоплееру фиксированную высоту, он не будет отображаться так, как я хотел, на разных экранах iphone. например, если я укажу, допустим, высоту iphone 12 pro, он будет правильно соответствовать экрану, но на iphone меньшего размера будет показана только часть видеоплеера. Пользователю придется немного прокрутить, чтобы увидеть все видео. Моя цель — заставить все видео воспроизводиться в полноэкранном режиме, и если вы прокрутите вниз, появится остальная часть содержимого

2. нет, нет, это просмотр прокрутки, поэтому фиксированная высота не будет для вас проблемой, и вы можете попробовать его на iPhone 5s, чтобы протестировать его с подходящей высотой, попробуйте и сообщите мне, есть ли какие-либо ошибки