0

我正在尝试这个自定义类 — TMQuiltView — <a href="https://github.com/1000Memories/TMQuiltView" rel="nofollow">https://github.com/1000Memories/TMQuiltView。通常,我在 Storyboard 中布局界面,这不是问题。由于这是一个自定义类,看起来好像我必须以编程方式这样做。

我会发布他们演示中的截图,但我没有足够的声誉。相反,我将展示 -(void) layoutSubviews 方法

- (void)layoutSubviews {

self.photoView.frame = CGRectInset(self.bounds, kTMPhotoQuiltViewMargin, kTMPhotoQuiltViewMargin);
self.titleLabel.frame = CGRectMake(kTMPhotoQuiltViewMargin, self.bounds.size.height - 20 - kTMPhotoQuiltViewMargin, self.bounds.size.width - 2 * kTMPhotoQuiltViewMargin, 20);

}

我的目标是让 titleLabel 出现在 photoView 下方,但我不希望它具有确定的大小(即,如果我是故事板,我会使用自动布局)。所以,在titleLabel的方法中,我尝试计算标签的高度:

CGSize labelSize = [_titleLabel.text sizeWithFont:_titleLabel.font
                                constrainedToSize:_titleLabel.frame.size
                                    lineBreakMode:NSLineBreakByWordWrapping];

    labelHeight = labelSize.height;

但这就是我陷入死胡同的地方。我不能在制作 CGRect 时使用它(CGPoint 不兼容)。我在某处为图像制作 CGRect 吗?我如何定义它与 self.bounds 的关系?

4

1 回答 1

0
  1. 不要忘记调用方法[super layoutSubviews];layoutSubviews
  2. sizeWithFont:constrainedToSize:lineBreakMode:在 iOS8 中已弃用
  3. 你可以_titleLabel.lineBreakMode在你的计算方法中使用

Ofc 你可以在你的方法中使用这个大小,例如:

CGRectMake(origin.x, origin.y, size.width, size.height);

为了帮助您编写代码,我需要澄清一下:您想要一个位于标签上方的 imageView,并且标签应根据文本大小调整大小?

广告3。您可以改用这种方法(来源:GitHub 开源库):

- (CGSize)ios67sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size {
    CGSize textSize;
    if ([self respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) {
        textSize = [self boundingRectWithSize:size options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName:font} context:nil].size;
    } else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        textSize = [self sizeWithFont:font constrainedToSize:size];
#pragma clang diagnostic pop
    }

    return textSize;
}
于 2014-11-20T10:54:53.950 回答