以编程方式更改 UIImageView 帧大小

Posted

技术标签:

【中文标题】以编程方式更改 UIImageView 帧大小【英文标题】:changing UIImageView frame size programmatically 【发布时间】:2013-11-17 22:28:42 【问题描述】:

我有一个UImageView,其初始尺寸从xib 设置为:

Y:0,高度:406。

viewDidLoad,根据条件我使用这段代码:

self.mainAdImg.frame = CGRectMake(self.mainAdImg.frame.origin.x, self.mainAdImg.frame.origin.y + OFFSET, self.mainAdImg.frame.size.width, self.mainAdImg.frame.size.height);

在哪里mainAdImg is the UIImageView, and OFFSET is 20.0f

所以,我预计图像会下降20.0

相反,新值变为:

Y : 20 (correct), height: 426 (not expected)

为什么高度会变化?

编辑:

我没有使用自动布局。

我记录原点,高度如下:

NSLog(@" Y : %f, height : %f",self.mainAdImg.frame.origin.y,self.mainAdImg.frame.size.height);

【问题讨论】:

您使用的是什么自动调整大小/布局?你是如何记录帧的? self.mainAdImg.frame.size,height 应该是 self.mainAdImg.frame.size.height 吧? 忽略错字,问题是为什么高度会改变? 在改变帧大小之前你得到的高度是多少?在更改帧大小之前,将 NSLog 打印出高度。 自动调整大小?在 iPhone 5 上运行但 XIB 是 iPhone 4? 【参考方案1】:

您可以在viewDidLayoutSubviews 中这样做

- (void)viewDidLayoutSubviews 
    [super viewDidLayoutSubviews];

    // Do your resizing

viewDidLoad 中,视图刚刚加载,依赖帧值还为时过早。该视图没有超级视图,并且自动调整掩码和自动布局规则可以更改帧值。

如果您仍想在 viewDidLoad 中执行此操作,则需要使用固定帧值(例如 CGRectMake(10,10,600,400))。

【讨论】:

以上是关于以编程方式更改 UIImageView 帧大小的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView 不会以编程方式更改尺寸

如何在 Objective-C 中以编程方式添加特定大小的 UIImageView。我也有同一个类的 xib 文件,但我不想使用它

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

调整大小后使用自动布局以编程方式居中 UIImageVIew

如何以编程方式更改 UIImageView 的高度?

UIScrollView 不使用自动布局滚动(内容视图框架大小以编程方式更改)