Как сделать прокрутку в Swift, UIKitIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Как сделать прокрутку в Swift, UIKit

Сообщение Гость »



Изображение


Я сделал это приложение так, как показано на изображении выше. но прокрутка не работает. Я хочу полностью опустить ScrollView.

Я задал вопрос, связанный с этим, и меня это сработало. Но мне нужно сделать какую-то функцию, а стратегия...
[*]установить виды (порядок: Метка заголовка, Метка даты, Метка изображения (опция), Метка статьи). [*]якоря соответствуют приведенному выше представлению, например: NSLayoutConstraint.activate([...topAnchor...(equalTo: overView.bottomAnchor, consrant: 20) [*]Высота scrollView и UIView(Container) будет обновлена ​​после настройки объединения высот представлений.
Код не работает, Беллоу. Все представления настраиваются по коду.

DetailViewController.Swift

импортировать UIKit класс DetailViewController: UIViewController { частный пусть titleLabel: UILabel = { пусть просмотр = UILabel() view.numberOfLines = 2 обратный вид }() частный let dateLabel: UILabel = { пусть просмотр = UILabel() обратный вид }() частная прокрутка: UIScrollView = { пусть прокрутка = UIScrollView() прокрутка.backgroundColor = .коричневый возврат прокрутки }() частный контейнер Let: UIView = { пусть контейнер = UIView() Container.backgroundColor = .lightGray возвратный контейнер }() частное изображение: UIImageView = { пусть изображение = UIImageView() вернуть изображение }() частный контроллер Let: UIPageControl = { пусть контроллер = UIPageControl() контроллер возврата }() частный контент: UITextView = { пусть контент = UITextView() вернуть контент }() вар имя_файла: String! вар идентификатор: Строка! вар номер записи: Int! вар dataSize: Int! var запись: Вход! переопределить функцию viewDidLoad() { супер.viewDidLoad() // Выполняем любые дополнительные настройки после загрузки представления. // Получаем идентификатор содержимого и анализируем имя файла синтаксический анализFileName (идентификатор: идентификатор) добавитьПрокруткаView() Scroll.contentSize = CGSize (ширина: self.view.frame.width, высота: self.view.frame.height) добавитьTopLabels() content.text = запись. Статья // isImage имеет значение true или false addContent(isImage: вход.isImage) // Для отладки content.backgroundColor = .желтый прокрутка.updateContentSize() content.contentSize = CGSize (ширина: self.scroll.frame.width, высота: self.scroll.frame.height) } } Расширение 1: функция объединения

расширение UIScrollView { функция updateContentSize() { let UnionTotal = recursiveUnion (представление: self) self.contentSize = CGSize (ширина: self.frame.width, высота: UnionTotal.height + 50) } частная функция recursiveUnion (представление: UIView) -> CGRect { вар totalRect: CGRect = .ноль для v в view.subviews { totalRect = totalRect.union(recursiveUnion(view: v)) } print("Размер обновленного содержимого: \(totalRect.union(view.frame))") вернуть totalRect.union(view.frame) } } Расширение 2: установка представлений и ограничений

расширение DetailViewController { fileprivate func parsingFileName (id: String) { // анализируем идентификатор и получаем имя файла // ссылка: https://ssooyn.tistory.com/22 пусть s = id.index(id.startIndex, offsetBy: 0) пусть e = id.index(id.startIndex, offsetBy: 7) пусть r = s...e fileName = "запись-" + String(id[r]) let dataFromFile = DataLoader(имя_файла: имя_файла, тип_файла: ".json").entry // Находим запись для я в 0 ..< dataFromFile.count { если dataFromFile.id == id { запись = данныеИзФайла перерыв } } } fileprivate func addScrollView() { // Настройка представлений — ScrollView и Container view.addSubview(прокрутка) Scroll.translatesAutoresizingMaskIntoConstraints = false прокрутка.addSubview(контейнер) Container.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ прокрутка.topAnchor.constraint(equalTo: self.view.topAnchor), прокрутка.bottomAnchor.constraint(equalTo: self.view.bottomAnchor), прокрутка.leadingAnchor.constraint(equalTo: self.view.leadingAnchor), прокрутка.trailingAnchor.constraint(equalTo: self.view.trailingAnchor), контейнер.topAnchor.constraint(equalTo: self.scroll.topAnchor), контейнер.bottomAnchor.constraint(equalTo: self.scroll.bottomAnchor), контейнер.leadingAnchor.constraint(equalTo: self.scroll.leadingAnchor), контейнер.trailingAnchor.constraint(equalTo: self.scroll.trailingAnchor), контейнер.widthAnchor.constraint(equalTo: self.scroll.widthAnchor, множитель: 1), Container.heightAnchor.constraint(equalTo: self.scroll.heightAnchor, множитель: 1) ]) } fileprivate func addTopLabels() { // Настройка представлений — верхние метки titleLabel.textAlignment = .left titleLabel.text = запись.title titleLabel.font = UIFont(имя: «Pretendard-SemiBold», размер: 17) dateLabel.textAlignment = .right dateLabel.text = String(entry.year) + "." + String(entry.month) + "." + Строка(вход.день) контейнер.addSubview(titleLabel) titleLabel.translatesAutoresizingMaskIntoConstraints = false контейнер.addSubview(dateLabel) dateLabel.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ titleLabel.topAnchor.constraint(equalTo:Container.topAnchor), titleLabel.leadingAnchor.constraint(equalTo:Container.leadingAnchor), titleLabel.trailingAnchor.constraint(equalTo:Container.trailingAnchor), titleLabel.heightAnchor.constraint(equalToConstant: 20), titleLabel.widthAnchor.constraint(equalTo:Container.widthAnchor), dateLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor), dateLabel.leadingAnchor.constraint(equalTo:Container.leadingAnchor), dateLabel.trailingAnchor.constraint(equalTo:Container.trailingAnchor), dateLabel.heightAnchor.constraint(equalToConstant: 20), dateLabel.widthAnchor.constraint(equalTo:Container.widthAnchor), ]) } fileprivate func addContent (isImage: Bool) { если isImage == false { печать("Нет изображения") image.backgroundColor = .darkGray image.isHidden = правда контейнер.addSubview(содержимое) content.translatesAutoresizingMaskIntoConstraints = false контент.sizeToFit() content.isScrollEnabled = ложь NSLayoutConstraint.activate([ content.topAnchor.constraint(equalTo: dateLabel.bottomAnchor, константа: 20), content.leadingAnchor.constraint(equalTo:Container.leadingAnchor), content.trailingAnchor.constraint(equalTo:Container.trailingAnchor), // content.bottomAnchor.constraint(equalTo:Container.bottomAnchor), content.heightAnchor.constraint(equalTo:Container.heightAnchor), content.widthAnchor.constraint(equalTo:Container.widthAnchor), ]) } еще { print("Есть изображение") image.backgroundColor = .red image.image = UIImage(с именем: "202310172204-1-1.jpeg") контейнер.addSubview(изображение) content.translatesAutoresizingMaskIntoConstraints = false контент.sizeToFit() content.isScrollEnabled = ложь контейнер.addSubview(содержимое) image.translatesAutoresizingMaskIntoConstraints = false печать(content.contentSize.height) NSLayoutConstraint.activate([ image.topAnchor.constraint(equalTo: dateLabel.bottomAnchor, константа: +20), image.leadingAnchor.constraint(equalTo:Container.leadingAnchor), image.trailingAnchor.constraint(equalTo:Container.trailingAnchor), image.heightAnchor.constraint(equalTo:Container.widthAnchor), image.widthAnchor.constraint(equalTo:Container.widthAnchor), content.topAnchor.constraint(equalTo: image.bottomAnchor, константа: +20), content.leadingAnchor.constraint(equalTo:Container.leadingAnchor), content.trailingAnchor.constraint(equalTo:Container.trailingAnchor), // content.bottomAnchor.constraint(equalTo:Container.bottomAnchor), content.heightAnchor.constraint(equalTo:Container.heightAnchor), content.widthAnchor.constraint(equalTo:Container.widthAnchor), ]) } } } Спасибо, что прочитали длинную историю и код. :) Хорошего дня!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Swift/UIKIt: как сделать так, чтобы градиентный фон занимал всю длину UITableView?
    Anonymous » » в форуме IOS
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Swift/UIKIt: как сделать так, чтобы градиентный фон занимал всю длину UITableView?
    Anonymous » » в форуме IOS
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Как сделать фон UIView черно-белым, но сохранить цвет объектов узла в Swift (UIKit, Metal)?
    Anonymous » » в форуме IOS
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как сделать фон UIView черно-белым, но сохранить цвет объектов узла в Swift (UIKit, Metal)?
    Anonymous » » в форуме IOS
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как сделать фон UIView черно-белым, но сохранить цвет объектов узла в Swift (UIKit, Metal)?
    Anonymous » » в форуме IOS
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»