【问题标题】:Get screen width to automatically fit content with UIScreen?使用 UIScreen 获取屏幕宽度以自动适应内容?
【发布时间】:2020-10-16 17:48:21
【问题描述】:

我正在使用最新版本的XcodeSwift

我有一个Navigation Bar 和一个Navigation Item Title

在某些屏幕较小的设备上,此标题太长,因此会被截断。

我的想法是:

  1. 首先我计算特定宽度上适合多少个字符。 (当然有2-3个字符的余量,因为有些字符比其他字符大。)

  2. 我必须有可能的标题,一个较长,宽度为 x 个字符,另一个较短,宽度为 y 个字符。

  3. 现在我根据字符数和当前屏幕可以容纳的最大字符数检查较长的标题是否适合。如果没有,我将展示其较短的替代品。

我想用以下代码测量屏幕宽度:

let screenWidth = UIScreen.main.bounds.size.width
  1. 这是正确的做法吗?或者这会不会,例如根据屏幕分辨率输出不同的值,虽然设备的实际宽度是一样的……

  2. 这是什么单位?像素?

注意:应用是纵向模式,所以width也是真实设备宽度。

【问题讨论】:

  • "应用程序处于纵向模式" 您的应用程序永远不会进入横向模式吗?如果是这样,那么导航栏在横向模式下会更大。
  • @Sweeper 我知道,我会处理,但这与问题无关。你能帮我解决上面的问题吗?

标签: ios swift xcode width uiscreen


【解决方案1】:

这是什么单位?像素?

来自docs

屏幕的边界矩形,以磅为单位。

所以是积分

这是正确的做法吗?

既然您要获取导航栏的宽度,为什么不直接获取导航栏的宽度

navigationController?.navigationBar.bounds.width

当导航栏覆盖整个屏幕宽度时,这将与UIScreen.main.bounds.width 的值相同,但这样更有意义,不是吗?

另外,仅供参考,您可以使用特征集合检查屏幕宽度是否小。虽然这不如计算字符大小准确,但当您尝试使 UI 适应不同的屏幕尺寸时,这是 Apple 推荐的方法。

if traitCollection.horizontalSizeClass == .compact {
    // small screen width
} else {
    // big screen width
}

【讨论】:

  • 感谢您的努力。我的Navigation Bar 中有一个leftBarButtonItem 和一个rightBarButtonItem。所以我需要UINavigationItem 的宽度。这可能吗? @IBOutlet weak var navigationItemTitle: UINavigationItem! print(navigationItemTitle.bounds.size.width) 说:Value of type 'UINavigationItem' has no member 'bounds'
  • @David 好吧,在这种情况下,我建议您检查水平尺寸等级。检查这些东西的宽度真的是hack。我不建议你这样做......
  • @David 呃.. 不是吗? a point is 1/72 of an inch
  • 我不能也减去BarButtonItems 的大小吗?
  • 对不起,我不知道这么简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 2018-12-23
  • 2011-02-22
  • 2019-01-09
相关资源
最近更新 更多