Ios UITableView中自动布局中带填充的多行UILabel

Ios UITableView中自动布局中带填充的多行UILabel,ios,uitableview,uilabel,autolayout,Ios,Uitableview,Uilabel,Autolayout,我在UITableView中有一个UILabel,它最多应该是2行,周围有一些填充(7个左右,2个顶部和底部)。我使用的是autolayout,目标仅为iOS6及以上版本。正在以编程方式创建和添加所有视图 我已经对UILabel进行了子类化,下面是init方法: - (id)init { self = [super init]; self.translatesAutoresizingMaskIntoConstraints = NO; self.numberOfLines = 2; self.b

我在UITableView中有一个UILabel,它最多应该是2行,周围有一些填充(7个左右,2个顶部和底部)。我使用的是autolayout,目标仅为iOS6及以上版本。正在以编程方式创建和添加所有视图

我已经对UILabel进行了子类化,下面是
init
方法:

- (id)init
{
self = [super init];

self.translatesAutoresizingMaskIntoConstraints = NO;
self.numberOfLines = 2;
self.backgroundColor = UIColorFromARGB(0x99000000);
self.textColor = [UIColor whiteColor];
self.font = [UIFont boldSystemFontOfSize:14.0f];

return self;
}
如果我加上这个,我得到了正确的填充,但它只剩下一行:

- (void)drawTextInRect:(CGRect)rect {
UIEdgeInsets insets = {2, 7, 2, 7};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
这个答案我已经见过好几次了,但对我来说不起作用(没有效果):


它在表视图中的显示是否有所不同?任何帮助都将不胜感激。

正如您在我的上述评论中所看到的,您并没有真正说出它在做什么,这是您不期望的。我刚刚自己做了这件事,它与自动布局一起工作:

@implementation InsetLabel

- (void) setInsets:(UIEdgeInsets)insets
    {
    _insets = insets ;
    [self invalidateIntrinsicContentSize] ;
    }

- (void)drawTextInRect:(CGRect)rect
    {
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.insets)];
    }

- (void)resizeHeightToFitText
    {
    CGRect frame = [self bounds];
    CGFloat textWidth = frame.size.width - (self.insets.left + self.insets.right);

    CGSize newSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(textWidth, 1000000) lineBreakMode:self.lineBreakMode];
    frame.size.height = newSize.height + self.insets.top + self.insets.bottom;
    self.frame = frame;
    }

- (CGSize) intrinsicContentSize
    {
    CGSize superSize = [super intrinsicContentSize] ;
    superSize.height += self.insets.top + self.insets.bottom ;
    superSize.width += self.insets.left + self.insets.right ;
    return superSize ;
    }

@end

这比imho更有效。

这个问题()中的任何解决方案有帮助吗?没有,我了解布局约束是如何工作的。我的问题是多行标签与填充的特殊组合,使用自动布局(在表视图中,但我怀疑这是不相关的)。它做错了什么?
@implementation InsetLabel

- (void) setInsets:(UIEdgeInsets)insets
    {
    _insets = insets ;
    [self invalidateIntrinsicContentSize] ;
    }

- (void)drawTextInRect:(CGRect)rect
    {
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.insets)];
    }

- (void)resizeHeightToFitText
    {
    CGRect frame = [self bounds];
    CGFloat textWidth = frame.size.width - (self.insets.left + self.insets.right);

    CGSize newSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(textWidth, 1000000) lineBreakMode:self.lineBreakMode];
    frame.size.height = newSize.height + self.insets.top + self.insets.bottom;
    self.frame = frame;
    }

- (CGSize) intrinsicContentSize
    {
    CGSize superSize = [super intrinsicContentSize] ;
    superSize.height += self.insets.top + self.insets.bottom ;
    superSize.width += self.insets.left + self.insets.right ;
    return superSize ;
    }

@end
@implementation InsetLabel

- (void) setInsets:(UIEdgeInsets)insets
    {
    _insets = insets ;
    [self invalidateIntrinsicContentSize] ;
    }

- (void)drawTextInRect:(CGRect)rect
    {
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.insets)];
    }

- (void)resizeHeightToFitText
    {
    CGRect frame = [self frame];
    CGFloat textWidth = frame.size.width - (self.insets.left + self.insets.right);

    CGSize newSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(textWidth, 1000000) lineBreakMode:self.lineBreakMode];
    frame.size.height = newSize.height + self.insets.top + self.insets.bottom;
    self.frame = frame;
    }

- (CGSize) intrinsicContentSize
    {
    CGSize superSize = [super intrinsicContentSize] ;
    superSize.height += self.insets.top + self.insets.bottom ;
    superSize.width += self.insets.left + self.insets.right ;
    return superSize ;
    }
- (void)layoutSubviews
{
    [super layoutSubviews];
    [self resizeHeightToFitText];
}