您不能frame
使用frame.size.height = self.contentSize.height;
而是使用frame = CGRectMake(x, y, width, height);
Ex:
self.imageScrollView.frame = CGRectMake(self.imageScrollView.frame.origin.x, self.imageScrollView.frame.origin.y, self.imageScrollView.frame.size.width, self.contentSize.height);
从外观上看,我怀疑您的内容大小imageScrollView
是正确的,但它被您的导航栏隐藏了。在这种情况下,我建议将imageScrollView
框架的原点设置为导航栏的高度,例如:
self.imageScrollView.frame = CGRectMake(self.imageScrollView.frame.origin.x, self.navigationController.navigationBar.frame.size.height, self.imageScrollView.frame.size.width, self.contentSize.height);
更新#1:这是一个很好的答案的链接,解释了为什么你不能以你尝试的方式设置框架:ios frame change one property (eg width)
所以基本上你可以CGRect
通过改变一个属性来编辑一个单独的结构,但是如果它是另一个对象的属性,你不能CGRect
以这种方式更新它——在这种情况下是 a 的属性frame
。
更新#2:另外,要更改界面中元素的位置,请将代码放在 中viewDidLayoutSubviews
,而不是viewDidLoad
.
更新#3:要viewDidLayoutSubviews
只处理一次代码,请将其括在条件中,例如:
bool subviewsLaidout;
- (void)viewDidLoad {
subviewsLaidout = NO;
}
- (void)viewDidLayoutSubviews {
if (!subviewsLaidout) {
self.imageScrollView.frame = CGRectMake(self.imageScrollView.frame.origin.x, self.navigationController.navigationBar.frame.size.height, self.imageScrollView.frame.size.width, self.contentSize.height);
subviewsLaidout = YES;
}
}