繁体   English   中英

如果在滚动视图下面有一个视图,则调整滚动视图缩进不起作用

[英]Adjust scroll view indents doesn't work if there is a view below the scrollview

我正在Xcode 5.0.1的情节提要中制作一个适用于iOS 7的应用程序。

我有一个带有滚动视图的视图控制器,该视图显示在导航控制器内部,底部带有工具栏。

滚动视图可以正确插入,并在启用“调整滚动视图插入”的情况下在顶部和底部栏下正确滚动。

我想添加一个不会在滚动视图后面滚动的背景图像。 当我这样做时,就好像未选中Adjusts Scroll View Insets标志一样,滚动条和内容始终位于顶部和底部。

不管是将视图放入情节提要中,还是将其以编程方式在ViewDidLoad或ViewWillAppear中进行设置,还是将其放在情节提要中的较高位置,然后以编程方式将其移回至后面,都可以同样的结果,滚动条不调整条形。

如果我将其加载或移动到viewDidAppear中,则它可以正常工作,但是对于我的过渡来说为时已晚,我需要在它开始变得可见时在后台显示该视图。

我怀疑这是ios7的错误,是否有任何已知的解决方法?

我遇到了同样的问题,解决方案并不简单。 我所做的是将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属性才会起作用。 您可以将滚动视图嵌入视图中,只要滚动视图在堆栈的底部(在界面构建器的顶部),它仍将起作用。 每当您在滚动视图下方添加另一个子视图时,自动插入调整将停止工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM