我遇到了同样的问题,解决方案并不简单。我所做的是将 UIScrollView 子类化,向其中添加带有图像的子层并将其与滚动一起移动。我确信有更好的方法来做我所做的,但它确实有效。
这是 ScrollViewWithBackgroundImage.m。我没有使用 arc,如果你是,只需删除 dealloc 方法并将 'retain' 更改为 'strong'。#import <QuartzCore/QuartzCore.h>
此外,如果您还没有添加,则需要添加。
#import "ScrollViewWithBackgroundImage.h"
@interface ScrollViewWithBackgroundImage()
@property (nonatomic, retain) CALayer *backgroundLayer;
@end
@implementation ScrollViewWithBackgroundImage
- (void)setBackgroundImage:(UIImage *)image {
CALayer *backgroundImageLayer = [CALayer layer];
backgroundImageLayer.contents = (id)[image CGImage];
backgroundImageLayer.bounds = self.bounds;
backgroundImageLayer.position = self.center;
[self.layer insertSublayer:backgroundImageLayer atIndex:0];
self.backgroundLayer = backgroundImageLayer;
[self setNeedsLayout];
}
-(void)layoutSubviews {
[super layoutSubviews];
CGRect frame = self.bounds;
frame.origin = [self convertPoint:self.bounds.origin toView:self];
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
self.backgroundLayer.frame = frame;
[CATransaction commit];
}
- (void)dealloc {
[_backgroundLayer release];
[super dealloc];
}
@end
和 ScrollViewWithBackgroundImage.h
@interface ScrollViewWithBackgroundImage : UIScrollView
- (void)setBackgroundImage:(UIImage *)image;
@end
然后,在视图控制器中:
- (void)viewDidLoad {
[super viewDidLoad];
// The rest of your viewDidLoad method...
[self.scrollView setBackgroundImage:[UIImage imageNamed:@"bk.default.png"]];
}
编辑:问题的原因是automaticallyAdjustScrollViewInsets
只有当滚动视图是堆栈中的第一个子视图时,该属性才会起作用。您可以将滚动视图嵌入到视图中,只要滚动视图位于堆栈底部(在界面构建器的顶部),它仍然可以工作。每当您在滚动视图下方添加另一个子视图时,自动插入调整将停止工作。