Контроллер Popover не учитывает класс размера устройства - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю над приложением, которое использует пару UITableView в качестве всплывающего окна.У меня есть настраиваемая ячейка с ярлыками, и я использую классы размеров для увеличения размера шрифтов при просмотре на iPad.Размер шрифтов не работает на поповере.Независимо от устройства, которое я использую, оно соответствует стандартному размеру шрифта.Если я использую ту же ячейку и показываю ее в UITableView, который не является поповером, шрифт настраивается в соответствии с устройством, на котором он отображается

Это моя пользовательская ячейка.Это очень просто, просто с надписью.

enter image description here

Вот так у меня настроены шрифты.

enter image description here

Как видите, я установил шрифт для wRhR намного больше, чем по умолчанию.

Когда я запускаю его на iPad, это размерШрифт в ячейках, когда я показываю таблицу.

enter image description here

И это размер шрифта в ячейках в всплывающем окне.

enter image description here

Если я увеличу размер шрифта по умолчанию, он отобразится во всплывающем окне.Вот как это выглядит, когда я устанавливаю размер шрифта по умолчанию равным 30.

enter image description here

Как я могу получить метку UITableViewCell для соответствия шрифтуустановить для класса размера wRhR при использовании на поповере?

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

enter image description here

Отображение всплывающего окна с табличным представлением без пользовательской ячейки выглядит следующим образом.

enter image description here

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

Еще одно редактирование: я понял это.Добавление этого к коду для popover исправляет это:

navController.setNavigationBarHidden(true, animated: false)

1 Ответ

0 голосов
/ 28 февраля 2019

Один из вариантов - использовать пользовательский UINavigationController:

class PopoverNavController: UINavigationController {

    var customTraitCollection: UITraitCollection?

    convenience init(rootViewController: UIViewController, traitCollection: UITraitCollection? = nil) {
        self.init(rootViewController: rootViewController)
        customTraitCollection = traitCollection
    }

    override var traitCollection: UITraitCollection {
        if let customTraitCollection = customTraitCollection {
            return customTraitCollection
        }
        return super.traitCollection
    }
}

. Вы можете использовать его следующим образом:

let storyboard = UIStoryboard(name: "Main", bundle: .main)
guard let popoverController = storyboard.instantiateViewController(withIdentifier: "PopoverController") as? PopoverController else {
    return
}
// Here we set the override trait collection
let navController = PopoverNavController(rootViewController: popoverController, traitCollection: traitCollection)
navController.modalPresentationStyle = .popover
let popover = navController.popoverPresentationController
popoverController.preferredContentSize = preferredContentSize
popover?.sourceView = sourceView
popover?.sourceRect = sourceRect
popover?.permittedArrowDirections = .up
present(navController, animated: true)

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

let customTraitCollection = UITraitCollection(horizontalSizeClass: .regular)
let navController = PopoverNavController(rootViewController: popoverController, traitCollection: customTraitCollection)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...