0

我有表格视图和自定义单元格。我的自定义单元格有一个多行标签,因此我必须实现代码来更改标签的高度。我把它放到layoutSubviews。但我有麻烦。单元格显示不正确。我开始使用 NSLog 进行 debagging。我发现 layoutSubviews 调用不是最后一个(我检查了 init 方法、layoutSubview、willDisplayCell(表视图委托方法)、drawRect 和 prepareForSegue)。最后一个是 drawRect 方法。我的解决方案是在 drawRect 中调用 layoutSubviews,这有助于第一次出现表格视图。但是,如果我在视图之间切换,drawRect 方法不再被调用并且我有同样的错误。如果你愿意,我可以显示截图,但我真的需要你的建议,伙计们。

PS:英语是我的主要麻烦,我知道,对不起。:)

4

1 回答 1

0

我自己找到了很棒的解决方案。诀窍是在表格视图数据源 NSArray 中创建带有圆角的图像。我做了这样的方向:

1.1 将 QuartzCore 框架添加到项目中。

1.2 然后为 UIImage 添加类别。UIImage+圆角.h:

    #import <UIKit/UIKit.h>

    @interface UIImage (RoundedCorners)

    - (UIImage *)imageWithRoundedCorners:(CGFloat)radius;

    @end

1.3 UIImage+圆角.m:

    #import "UIImage+RoundedCorners.h"
    #import <QuartzCore/QuartzCore.h>

    @implementation UIImage (RoundedCorners)

    - (UIImage *)imageWithRoundedCorners:(CGFloat)radius;
    {
        CALayer *imageLayer = [CALayer layer];
        imageLayer.frame = CGRectMake(0, 0, self.size.width, self.size.height);
        imageLayer.contents = (id)self.CGImage;

        imageLayer.masksToBounds = YES;
        imageLayer.cornerRadius = radius;

        UIGraphicsBeginImageContext(self.size);
        [imageLayer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        return roundedImage;
    }

    @end

2.1 使用要使用的图像创建 NSArray (NSMutableArray):

    _thumbnailImages = [[NSMutableArray alloc] initWithCapacity:[_dishes count]];
    for (int counter = 0; counter < [_dishes count]; counter++) 
    {
        EBEntityDish *dish = [_dishes objectAtIndex:counter];
        [_thumbnailImages addObject:[dish.image.thumbnailImage imageWithRoundedCorners:IMAGE_CORNER_RADIUS]];
    }

2.2 注意事项:

    IMAGE_CORNER_RADIUS == your image corner radius.
    _dishes - My objects that contain images small size (144 x 144)

2.3 结果:

    My FPS increased on 10 - 20 FPS! Really awesome! Good luck!
于 2013-07-07T16:00:32.803 回答