最后在uitableviewcell中调用的方法是什么?

时间:2013-07-07 00:08:26

标签: uitableview drawrect

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

PS:英语是我的主要麻烦,我知道,抱歉。 :)

1 个答案:

答案 0 :(得分:0)

我自己找到了很棒的解决方案。诀窍是在表视图中创建数据源NSArray,其中的图像已经具有圆角。我做了这样的指示:

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

1.2然后为UIImage添加类别。的UIImage + RoundedCorners.h:

    #import <UIKit/UIKit.h>

    @interface UIImage (RoundedCorners)

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

    @end

1.3 UIImage + RoundedCorners.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!