Сборный вид Композиционный макет с предполагаемой высотой не работает - PullRequest
2 голосов
/ 11 октября 2019

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

Я создал макет collectionView на основе разделов с композиционным макетом. Поэтому мне нужно, чтобы высота моей клетки росла вместе с ее содержанием. Я думал, что использование .estimated(constant) сделает эту работу, но, похоже, она не работает. Внутренние ограничения кажутся мне хорошими.

Вот макет, с которым я работаю:

let size = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.42), heightDimension: .estimated(90))
let item = NSCollectionLayoutItem(layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(90)))
item.contentInsets = NSDirectionalEdgeInsets(top: 5.0, leading: 12.0, bottom: 5.0, trailing: 12.0)
let group = NSCollectionLayoutGroup.vertical(layoutSize: size, subitem: item, count: 1)
let section = NSCollectionLayoutSection(group: group)
section.contentInsets = NSDirectionalEdgeInsets(top: 0.0, leading: 6.0, bottom: 0.0, trailing: 0.0)
section.orthogonalScrollingBehavior = .groupPaging

Когда я устанавливаю больший размер текста в настройках специальных возможностей, вот что происходит:

enter image description here

Ячейка должна содержать 2 метки. Вот ограничения autoLayout:

    NSLayoutConstraint.activate([
        self.titleLabel.topAnchor.constraint(equalTo: self.container.topAnchor, constant: 10),
        self.titleLabel.leftAnchor.constraint(equalTo: self.container.leftAnchor, constant: 20),
        self.titleLabel.rightAnchor.constraint(equalTo: self.container.rightAnchor, constant: -20)
    ])

    NSLayoutConstraint.activate([
        self.subtitleLabel.topAnchor.constraint(equalTo: self.titleLabel.bottomAnchor, constant: 10),
        self.subtitleLabel.leftAnchor.constraint(equalTo: self.container.leftAnchor, constant: 20),
        self.subtitleLabel.rightAnchor.constraint(equalTo: self.container.rightAnchor, constant: -20),
        self.subtitleLabel.bottomAnchor.constraint(equalTo: self.container.bottomAnchor, constant: -10)
    ])

Заранее благодарим за помощь.

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

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

        let estimatedHeight = CGFloat(100)
        let layoutSize = NSCollectionLayoutSize(widthDimension: .estimated(200), heightDimension: .estimated(estimatedHeight))
        let item = NSCollectionLayoutItem(layoutSize: layoutSize)
        let group = NSCollectionLayoutGroup.horizontal(layoutSize: layoutSize, subitem: item, count: 1)
        let section = NSCollectionLayoutSection(group: group)
        section.contentInsets = NSDirectionalEdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10)
        section.interGroupSpacing = 10
        section.orthogonalScrollingBehavior = .groupPaging

Надеюсь, это поможет ^^

0 голосов
/ 26 октября 2019

Не уверен, что это имеет отношение к доступности системы, но, AFAIK, вы не можете использовать .estimated() с .contentInsets для предметов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...