自动调整 UIImageView 的大小以适合底层图像
Posted
技术标签:
【中文标题】自动调整 UIImageView 的大小以适合底层图像【英文标题】:Auto resizing UIImageView to fit underlying image 【发布时间】:2014-12-24 15:51:47 【问题描述】:我在 xib 文件中定义了一个自定义视图,其中有一个 UIImageView。
图像以编程方式添加。我在编译时不知道确切的图像大小。
imageView 的高度在设计上是恒定的,而宽度必须是动态的。
UIImageView 应该在设置后自动调整大小以适应图像,但它不会。
我试过了:
在 UI 设计器中设置“Intristic size = Placeholder”。 设置不同的模式,如“Aspect fit”或“Aspect fill” 设置约束(见截图) 在代码中设置大小(参见代码) 在 Google 和 *** 上搜索并尝试代码示例没有什么能帮助达到预期的结果。
这是我的代码:
@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
我尝试在 ViewController 文件中的 viewDidLoad 和 viewDidAppear 处调用 setLogo。
我尝试了 logoView.bounds 和 logoView.frame。输出是:
logoView.bounds before setting: 0, 0, 0, 44
logo size: 82, 71
logoView.bounds after setting0, 0, 50.816898, 44
但是我看到了这个:
所以即使设置 UIImageView 的框架也无济于事。
【问题讨论】:
【参考方案1】:尝试在 IB 中创建宽度约束,而不是设置图像视图的边界或框架,而是将其附加到类中的 IBOutlet 并更新宽度约束。
【讨论】:
以上是关于自动调整 UIImageView 的大小以适合底层图像的主要内容,如果未能解决你的问题,请参考以下文章
如何调整 uiimageview 的大小以仅适合 aspectfill 中的图像?