#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, чтобы протестировать его с подходящей высотой, попробуйте и сообщите мне, есть ли какие-либо ошибки