我正在开发一个使用几个UITableView
作为弹出框的应用程序。我有自定义单元格设置标签,我在iPad上查看时使用大小类来调整字体大小。字体的大小调整不适用于弹出窗口。无论我使用哪种设备,它都遵循默认的字体大小。如果我使用相同的单元格并在不是弹出窗口的UITableView
中显示它,则字体会根据显示它的设备进行调整
这是我的自定义单元格。这很简单,只有一个标签。
这就是我设置字体的方式。
如您所见,我的wRhR字体设置比默认值大得多。
当我在iPad上运行时,这是我显示表格时单元格中字体的大小。
这是popover中单元格中字体的大小。
如果我将默认字体大小调整得更大,它会反映在弹出窗口中。这是我将默认字体大小设置为30时的样子。
当在弹出窗口上使用时,如何让UITableViewCell
标签遵守wRhR大小类的字体集?
添加后,我注意到一个不一致。在此方法中使用的弹出窗口中,弹出框顶部和表之间存在大量空间。它看起来像这样:
使用没有自定义单元格的tableview显示弹出框如下所示。
我认为顶部的空白区域是导航栏。如果可能的话,我希望它看起来像第二张图片。
另一个编辑:我想通了。将其添加到弹出窗口的代码中可以修复它:
navController.setNavigationBarHidden(true, animated: false)
一种选择是使用自定义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)