簡體   English   中英

在viewDidLoad處將可調整大小的UIImage設置為UIImageView會被忽略

[英]Setting resizable UIImage to a UIImageView at viewDidLoad is ignored

我有一個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且框架正確。 另外,我還要確保圖像不為零,具有正確的大小以及可調整大小的圖像也不為零。 但是,該圖像未設置為UIImageView。

如果我在viewDidAppear:執行此操作viewDidAppear:一切正常。 如果我設置常規圖像(即使在viewDidLoad也不可拉伸),則一切正常。

據我所知,任何不需要superview或window的設置都可以在viewDidLoad上完成,為什么它不起作用?

看起來您的UIEdgeInsetsMake()調用正在指定0x0點的區域。 嘗試確保指定1x1區域。

例如,您的可拉伸圖像的大小為7x7像素,並且您想拉伸中心像素,則可以像這樣指定邊緣插入:UIEdgeInsetsMake(3.0f,3.0f,3.0f,3.0f)

好吧,我找到了導致它的原因,這是愚蠢的錯誤。

在我的viewDidLoad中,我正在加載另一個包含其他視圖的.xib文件:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Some setups
    [[NSBundle mainBundle] loadNibNamed:@"RatingDialog" owner:self options:nil];
    // More setups...
    [self buildResizableDescriptionAreaBackground]; // NOT WORKING!!
}

顯然,該筆尖中的UIImageViews之一也錯誤地連接到我的descriptionAreaBackground插座。 因此,當我設置可調整大小的圖像時,它的視圖不正確...

真蠢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM