【问题标题】:How can I add padding to the intrinsic content size of UILabel?如何向 UILabel 的内在内容大小添加填充?
【发布时间】:2014-01-19 09:14:03
【问题描述】:

我在 iOS7 上使用自动布局,但遇到这样的问题:

我将 UILabel 放到 UIView 上,并且正在安排我的自动布局约束,以便标签的 centerX = 父视图的 centerX。我没有对标签施加任何宽度限制。当我在运行时设置标签的文本时,标签的绘制宽度刚好足以容纳文本,左右两侧没有边距/填充。我想要的是在左侧和右侧有一些填充,这样文本就不会从标签开始的地方开始。实现这一点的技巧可能是将文本设置为 @" text " 但当然这不是要走的路:)

我怎样才能实现我想要的?

【问题讨论】:

    标签: ios objective-c uilabel autolayout sizetofit


    【解决方案1】:

    您可以自行扩展 UILabel 并覆盖intrinsicContentSize。请确保您也设置了 textAlignment = NSTextAlignmentCenter。

    -(CGSize)intrinsicContentSize{
        CGSize contentSize = [super intrinsicContentSize];
        return CGSizeMake(contentSize.width + 50, contentSize.height);
    }
    

    Swift 5.0

    open override var intrinsicContentSize: CGSize {
        let size = super.intrinsicContentSize
        return CGSize(width: size.width + 16, height: size.height)
    }
    

    这可能只适用于您只有一行要显示的文本。

    【讨论】:

      【解决方案2】:

      您可以创建一个 UILabel 子类并覆盖intrinsicContent,

      -(CGSize)intrinsicContentSize {
          CGSize s = [super intrinsicContentSize];
          s = CGSizeMake(s.width + 20, s.height);
          return s;
      }
      

      这将为宽度添加 20 磅的填充。如果您希望文本居中,请务必将文本对齐方式设置为居中。

      【讨论】:

        【解决方案3】:

        如果您使用自动布局,您可以设置水平约束并在metrics 参数中使用NSDictionary 来动态设置它。

        例如,如果您想为 UIButton 的内部内容提供 10pt 的填充,您可以执行以下操作:

        NSDictionary *padding = @{ @"padding" : @(button.intrinsicContentSize.width + 20) };
        NSArray *buttonHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button(==padding)]|" options:0 metrics:padding views:NSDictionaryOfVariableBindings(button)];
        

        【讨论】:

          【解决方案4】:

          如果您尝试为 UILabel 赋予其父视图不同的颜色,则需要将 UILabel 包含在 UIView 中,并带有所需的填充和背景颜色。 如果您的 UILabel 背景颜色与其父视图相同,那么我不明白问题只是使用自动布局来指定相对于它旁边的东西您想要多少空间。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多