我有一个UIImageView,上面有一个我想拉伸的图像。
为了实现这一点,我在viewDidLoad中执行以下操作:

-(void) buildResizableDescriptionAreaBackground
{
    UIImage *image = [UIImage imageNamed:@"description_area_background"];
    CGFloat top = ceilf(image.size.height / 2.0) - 1;
    CGFloat bottom = floorf(image.size.height / 2.0);
    CGFloat left = ceilf(image.size.height / 2.0) - 1;
    CGFloat right = floorf(image.size.height / 2.0);
    if ([image respondsToSelector:@selector(resizableImageWithCapInsets:)])
    {
        image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right)];
    }
    else
    {
        image = [image stretchableImageWithLeftCapWidth:left topCapHeight:top];
    }
    [self.descriptionAreaBackgroundImage setImage:image];
    [self.descriptionAreaBackgroundImage setHighlightedImage:image];
}

调试时,请确保descriptionAreaBackgroundImage不是nil,不是隐藏的,alpha = 1且框架正确。
另外,我还要确保图像不是nil,具有正确的大小,并且可调整大小的图像也不是nil。但是,该图像未设置为UIImageView。

如果我在viewDidAppear:上执行此操作,则一切正常。
如果我设置一个常规图像(即使在viewDidLoad也不可拉伸),则一切正常。

据我所知,任何不需要Superview或Window的设置都可以在viewDidLoad上完成,那么为什么它不起作用?

最佳答案

您的UIEdgeInsetsMake()调用似乎指定了0x0点的区域。尝试确保指定1x1区域。

例如,您的可拉伸图像的大小为7x7像素,并且您想让中心像素拉伸,则可以像这样指定边缘插入:UIEdgeInsetsMake(3.0f,3.0f,3.0f,3.0f)

07-28 06:14