ios - 如何为 iPad 动态更改弹出框的高度
问题描述
我有一个包含文本和开关的弹出窗口/弹出窗口。标签和开关位于 UIView 内的 stackView 中。stackView 受到约束,因此当 stackView 根据其内容更改大小时,UIView 也会更改。当我更改为另一种语言说法语时,文本字符串会变长,这会导致弹出窗口中的标签添加第二行文本。这反过来又使弹出框的高度变得更高。
这是问题所在:据我所知,popover 的高度是在打开 popover (TallY_VC) 的视图上的 prepare for segue 中设置的。直到 viewDidAppear 在 popover VC (Tallly_Popover_VC) 的代码中运行后才能确定 popover 的新高度。所以这意味着在准备 segue 运行时,popover 所需的高度是不确定的。
对于 iPhone,高度是自动设置的。有没有办法让 iPad 的弹出框高度像 iPhone 一样自动改变,或者是唯一的方法是preferredContentSize?
下面是 TallY_VC 视图控制器中的 segue 代码准备。这是我能想出的为每种语言设置弹出高度的唯一方法。我使用 Bundle.main.preferredLocalizations.first 来获取当前语言,然后手动设置 preferredContentSize 高度。这行得通,但是当我有 15 或 20 种语言时,它会很费力。提前致谢。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
let storyboard : UIStoryboard = UIStoryboard(name: "Tally_Popover", bundle: nil)
var popupVC: Tallly_Popover_VC = storyboard.instantiateViewController(withIdentifier: "Tallly_Popover") as! Tallly_Popover_VC
let navigationController = UINavigationController(rootViewController: popupVC)
var preferredLang: String = "en"
var theHeight: Int = 471
let deviceName = UIDevice().type
let deviceString: String = ("\(deviceName)")
if segue.identifier == "tally_pop"
{
if deviceString.contains("iPad")
{
popupVC = segue.destination as! Tallly_Popover_VC
preferredLang = Bundle.main.preferredLocalizations.first ?? "en"
if preferredLang == "fr"
{
theHeight = 551
} else if preferredLang == "en" {
theHeight = 471
}
popupVC.preferredContentSize = CGSize(width: 310, height: theHeight)
navigationController.isNavigationBarHidden = true
} else if deviceString.contains("iPhone") {
present(navigationController, animated: true)
navigationController.isNavigationBarHidden = false
}
}
}
解决方案
推荐阅读
- spring-webflux - StepVerifier expectNoEvent for 0ms 不起作用(想检查特殊情况是否有延迟)
- ruby - NoMethodError:DatabaseCleaner:Module 的未定义方法 `url_whitelist='
- java - 如何使用 Resin Web 应用程序配置 AWS SQS 消息侦听器
- android - 如何格式化字符串然后通过注释改变样式
- python - Python如何使用win32com.client和outlook插入图片?
- xamarin.forms - 如何将 CSS 样式应用于 TextCell 并更改 TextColor
- java - Spring Integration:异步拦截通道
- c++ - 二维向量类成员的迭代器
- c++ - 通过 pybind11 从 C++ 使用 scipy
- docker - 使用 docker 获得 websphere 自由有什么好处?