以编程方式更改 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 帧大小的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Objective-C 中以编程方式添加特定大小的 UIImageView。我也有同一个类的 xib 文件,但我不想使用它