在 viewDidLoad 处将可调整大小的 UIImage 设置为 UIImageView 被忽略

Posted

技术标签:

【中文标题】在 viewDidLoad 处将可调整大小的 UIImage 设置为 UIImageView 被忽略【英文标题】:Setting resizable UIImage to a UIImageView at viewDidLoad is ignored 【发布时间】:2012-08-19 13:15:08 【问题描述】:

我有一个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 不是零,不是隐藏,alpha = 1 并且具有正确的框架。 此外,我确保图像不为零,具有正确的大小,并且可调整大小的图像也不为零。然而图像并未设置为 UIImageView。

如果我在viewDidAppear: 这样做,一切正常。 如果我设置一个常规图像(不可拉伸,即使在viewDidLoad)一切正常。

据我所知,任何不需要超级视图或窗口的设置都可以在viewDidLoad 完成,为什么它不起作用?

【问题讨论】:

【参考方案1】:

看起来您的 UIEdgeInsetsMake() 调用指定了一个 0x0 点的区域。尝试确保指定一个 1x1 区域。

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

【讨论】:

有趣的理论,但测试证明它是错误的。问题中的代码已更新以反映我为确保中间有 1x1 可拉伸区域所做的测试。另一件事是,即使使用旧代码,如果我在 viewDidAppear 处执行它:它工作得很好(有很好的拉伸,没有任何奇怪的效果) 嗯,耻辱。您需要在 viewWillAppear 中找到不同之处。可能是您在 viewDidLoad 中设置了一些其他视图,导致 imageview 将自身调整为空(默认情况下,UIImageView 将其自动调整大小属性设置为 all)。或者,您可能在打开了 clipsToBounds 的情况下将 imageview 置于其父视图的边界之外。只是建议,因为它显然不可能从这里调试。 我发现了问题。没什么花哨的,只是老旧的 IBOutlet 错误……还是感谢您的帮助!【参考方案2】:

好的,我找到了导致它的原因,愚蠢的错误。

在我的 viewDidLoad 中,我正在加载另一个包含其他视图的 .xib 文件:

- (void)viewDidLoad

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

显然,该笔尖中的一个 UIImageViews 也错误地连接到了我的 descriptionAreaBackground 插座。所以当我设置可调整大小的图像时,它是错误的视图......

多么愚蠢。

【讨论】:

以上是关于在 viewDidLoad 处将可调整大小的 UIImage 设置为 UIImageView 被忽略的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pyqt 中创建可调整大小的布局 UI?

如何使用 jQuery UI 获取可拖动和可调整大小元素的坐标

保存元素位置和大小(JQuery ui 可调整大小和可拖动)

jQuery UI 可调整大小:单独使用东手柄时的自动高度

jquery UI 图像可调整大小但不可拖动?

Jquery UI 可排序和可调整大小的 Div