【问题标题】:UIButton failing to resize text correctly for iPhone 4/5 screen sizes. (using intrinsicContentSize)UIButton 无法为 iPhone 4/5 屏幕尺寸正确调整文本大小。 (使用内在内容大小)
【发布时间】:2016-11-17 06:22:04
【问题描述】:

我在 xib 中有一个 UIView 设置,其中有四个按钮。文本左对齐,左边缘内容插图全部设置为 20。约束如下:

对于 iPhone 4 和 5 的宽度,xib 的宽度设置为 320。当将此视图添加到视图控制器时,我使框架的宽度与当前屏幕尺寸相同,例如iPhone6 和按钮将水平拉伸。现在,当我设置标题文本时,我希望按钮的高度增加以适应文本。

我继承了 UIButton 并覆盖了这个方法:

override func intrinsicContentSize() -> CGSize {

        let labelSize = titleLabel?.sizeThatFits(CGSizeMake(self.frame.size.width, CGFloat.max)) ?? CGSizeZero
        let desiredButtonSize = CGSizeMake(labelSize.width + titleEdgeInsets.left + titleEdgeInsets.right, labelSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom)
        return desiredButtonSize
    }

然后我根据需要设置标题标签。对于 iPhone6 及更高版本,它可以完美运行:

但是对于 iPhone 4 或 5,我得到了这个结果:

有什么想法我可能在这方面做错了吗?真的很感激一些指示。谢谢!

【问题讨论】:

  • 4/5 和 6 的 iOS 版本是什么?
  • 9.3 在我正在测试的所有模拟器上@jacobbullock

标签: ios swift uiview uibutton


【解决方案1】:

我认为您不想使用按钮的框架来确定标题适合的大小。您想使用标题的框架。 titleLabel?.sizeThatFits(CGSizeMake(self.frame.size.width, CGFloat.max)) 将确定标签的高度,就好像标签的宽度是按钮框架的整体一样。但是您有一个不允许以这种方式布置标题的插图,因此它低估了高度。这是您的标签溢出按钮边界的方式。应该是:

    override func intrinsicContentSize() -> CGSize {

        let labelSize = titleLabel?.sizeThatFits(CGSizeMake((self.titleLabel?.frame.size.width)!, CGFloat.max)) ?? CGSizeZero
        let desiredButtonSize = CGSizeMake(labelSize.width + titleEdgeInsets.left + titleEdgeInsets.right, labelSize.height + titleEdgeInsets.top + titleEdgeInsets.bottom)
        return desiredButtonSize
    }

编辑

根据您的限制,您可能还需要

override func layoutSubviews() { 
    super.layoutSubviews() self.titleLabel?.preferredMaxLayoutWidth = self.frame.size.width 
}

【讨论】:

  • 试一试。 iPhone 4/5 和 6 使用此方法溢出。
  • 什么是大于等于约束?
  • 我创建了一个示例项目并测试我的代码。我看到你的方式溢出,我的代码导致它在所有设备上消失。我能看到的唯一区别是 >= 高度约束,我设置了按钮的内容插图而不是 titleLabel 上的插图。所以也许如果你发布你是如何做到的。我只是在 IB 中设置了左插图。
  • 我稍后会试一试。现在出来。我会让你知道结果。谢谢
  • 顺便问一下,你对身高限制做了什么?
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 2020-11-16
  • 1970-01-01
  • 2012-12-28
  • 2017-07-17
  • 1970-01-01
  • 2019-08-19
  • 2012-01-27
相关资源
最近更新 更多