2013-10-16 187 views
0

我在故事板的工作,在Xcode 5.0.1下方觀察不工作,使應用程序適用於iOS 7調整滾動視圖縮進,如果有滾動視圖

我有一個視圖控制器用使用底部的工具欄在導航控制器內顯示滾動視圖。

正確滾動查看並正確滾動,並在調整滾動視圖插圖啓用時在頂部和底部條形圖下正確滾動。

我想添加一個不滾動滾動視圖後面的背景圖片。當我這樣做時,就好像調整滾動視圖插入標記未被選中一樣,滾動條和內容始終位於頂部和底部條的後面。

如果我將視圖放在故事板中,或者在ViewDidLoad或ViewWillAppear中執行該程序,或者如果我將它放在故事板中的較高點,然後以編程方式將其移回到後面,則無關緊要,我得到了相同的結果,滾動不調整爲酒吧。

如果我在viewDidAppear中加載或移動它,那麼它就可以工作,但是對於我的轉換來說已經太晚了,我需要在背景開始變得可見時看到視圖。

我懷疑這是ios7的錯誤,有沒有已知的解決方法?

+0

因此,將滾動視圖置於前面,而不是將圖像視圖發送到後面沒有任何效果,因此它與視圖堆棧中較低的圖像視圖有關並且正在進行滾動偏移調整 – ima747

+0

注意:酒吧必須是半透明的,所以強迫一切不透明不是一種選擇 – ima747

+0

你可以發佈一個完整的源代碼到GitHub,Dropbox或類似的東西嗎? –

回答

1

我面臨同樣的問題,解決方案並不簡單。我所做的是UIScrollView的子類,添加一個帶圖像的子圖層並將其與滾動一起移動。我確信有更好的方法來做我所做的,但它的工作原理。

這是ScrollViewWithBackgroundImage.m。我沒有使用arc,如果是的話,只需刪除dealloc方法並用'strong'改變'retain'即可。另外,如果您尚未執行此操作,則需要添加#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屬性將只在滾動工作視圖是堆棧中的第一個子視圖。您可以將滾動視圖嵌入到視圖中,只要滾動視圖位於堆棧的底部(位於界面構建器的頂部),該視圖仍然可以工作。每當您添加滾動視圖下方的另一個子視圖時,自動插入調整將停止工作。

+0

特別感謝您澄清automaticAdjustScrollViewInsets屬性問題。 – ima747