自动调整UIImageView大小以适应底层图像

时间:2014-12-24 15:51:47

标签: ios objective-c xcode cocoa-touch

我有一个在xib文件中定义的自定义视图,其中包含一个UIImageView。

以编程方式添加图像。我不会在编译时显示确切的图像大小。

imageView的高度在设计上是不变的,宽度必须是动态的。

UIImageView应该在设置后自动调整大小以适应图像,但它没有。

我试过了:

  • 设置"内向大小=占位符"在UI Designer中。
  • 设置不同的模式,例如" Aspect fit"或" Aspect填充"
  • 设置约束(见截图)
  • 在代码中设置大小(参见代码)
  • 在Google和Stackoverflow上搜索并尝试代码示例

没有任何事情有助于取得理想的结果。

There's my xib screenshot

我的代码是:

@implementation EVACustomNavBar

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if(self)
    {
        [[NSBundle mainBundle] loadNibNamed:@"EVACustomNavBar" owner:self options:nil];
        self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.frame.size.width, self.frame.size.height);
        [self addSubview:self.view];
    }
    return self;
}

-(void)setLogo:(UIImage *)logo
{
    NSLog(NSStringFromCGRect(self.logoView.bounds));
    NSLog(NSStringFromCGSize(logo.size));
    self.logoView.backgroundColor = [UIColor blackColor];
    self.logoView.image = logo;
    CGRect ivFrame = self.logoView.bounds;
    CGFloat aspectRatio = logo.size.width / logo.size.height;
    ivFrame.size.width = ivFrame.size.height * aspectRatio;
    self.logoView.bounds = ivFrame;
    NSLog(NSStringFromCGRect(self.logoView.bounds));
}

@end

我尝试在viewConid文件中的viewDidLoad和viewDidAppear中调用setLogo。

我尝试了logoView.bounds和logoView.frame。输出是:

logoView.bounds before setting: {{0, 0}, {0, 44}}
logo size: {82, 71}
logoView.bounds after setting{{0, 0}, {50.816898, 44}}

但是我看到了这一点:There's my simulator screenshot

所以即使设置UIImageView的框架也没有帮助。

1 个答案:

答案 0 :(得分:2)

尝试在IB中创建宽度约束,而不是设置图像视图的边界或框架,将其附加到类中的IBOutlet并更新宽度约束。