弹出控制器不尊重设备大小等级

问题描述 投票:1回答:1

我正在开发一个使用几个UITableView作为弹出框的应用程序。我有自定义单元格设置标签,我在iPad上查看时使用大小类来调整字体大小。字体的大小调整不适用于弹出窗口。无论我使用哪种设备,它都遵循默认的字体大小。如果我使用相同的单元格并在不是弹出窗口的UITableView中显示它,则字体会根据显示它的设备进行调整

这是我的自定义单元格。这很简单,只有一个标签。

enter image description here

这就是我设置字体的方式。

enter image description here

如您所见,我的wRhR字体设置比默认值大得多。

当我在iPad上运行时,这是我显示表格时单元格中字体的大小。

enter image description here

这是popover中单元格中字体的大小。

enter image description here

如果我将默认字体大小调整得更大,它会反映在弹出窗口中。这是我将默认字体大小设置为30时的样子。

enter image description here

当在弹出窗口上使用时,如何让UITableViewCell标签遵守wRhR大小类的字体集?

添加后,我注意到一个不一致。在此方法中使用的弹出窗口中,弹出框顶部和表之间存在大量空间。它看起来像这样:

enter image description here

使用没有自定义单元格的tableview显示弹出框如下所示。

enter image description here

我认为顶部的空白区域是导航栏。如果可能的话,我希望它看起来像第二张图片。

另一个编辑:我想通了。将其添加到弹出窗口的代码中可以修复它:

navController.setNavigationBarHidden(true, animated: false)
ios uitableview autolayout popover size-classes
1个回答
1
投票

一种选择是使用自定义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)

这样,popover控制器获得与其父级相同的特征集合。如果此特征集合不适合您的需要,您还可以指定自定义特征集合,如下所示:

let customTraitCollection = UITraitCollection(horizontalSizeClass: .regular)
let navController = PopoverNavController(rootViewController: popoverController, traitCollection: customTraitCollection)
© www.soinside.com 2019 - 2024. All rights reserved.