2012-06-05 43 views
5

Tôi có một ứng dụng như ứng dụng ảnh nơi chế độ xem chính là UIScrollView chiếm toàn bộ kích thước màn hình. Ngoài ra, giống như ứng dụng ảnh, khi người dùng chạm vào màn hình có điều hướng mờ, trạng thái và thanh công cụ xuất hiện lại/biến mất.Toàn màn hình UIScrollView không hoạt động Chính xác

Tôi đang gặp sự cố khi đặt chế độ xem chính UIViewControllers làm UIScrollView và có chiều dài toàn màn hình. Vấn đề là khi thanh điều hướng và thanh trạng thái được hiển thị, các UIScrollView bị đẩy xuống bởi chiều cao của thanh điều hướng và trạng thái (nó không đi bên dưới chúng như nó giả sử). Khi người dùng chạm vào màn hình và thanh điều hướng/trạng thái biến mất, khi đó màn hình sẽ tự đặt lại để chiếm toàn bộ chiều dài của màn hình như được giả sử.

Một công việc đơn giản xung quanh việc đặt chế độ xem chính là UIView và gắn UIScrollView trên đầu trang hoạt động. Tuy nhiên, tôi muốn thử và có được điều này để làm việc mà không có bất kỳ cách giải quyết (tức là điều chỉnh UIScrollViews contentInset, vv) bởi vì trong lý thuyết nó sẽ làm việc.

Dưới đây là đoạn code Tôi đang thực hiện:

- (void)loadView 
{ 

    self.wantsFullScreenLayout = YES; 

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(0,0,320,480)]; 
    scrollView.contentSize = CGSizeMake(320, 480); 
    scrollView.scrollEnabled = NO; 
    scrollView.contentOffset = CGPointZero; 
    scrollView.bounces = NO; 
    self.view = scrollView; 
    [scrollView release]; 

} 

- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    self.navigationController.navigationBar.translucent = YES; 
    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackTranslucent animated: NO]; 
    self.navigationController.toolbarHidden = NO; 
    self.navigationController.toolbar.barStyle = UIBarStyleBlack; 
    self.navigationController.toolbar.translucent = YES; 

    [self startTimer]; 
} 

- (void) viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    self.navigationController.navigationBar.translucent = NO; 
    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleDefault animated: NO]; 

    [self cancelTimer]; 
} 

UPDATE: Tôi đã nhận thấy đó là contentOffsetcontentInset đó đang thay đổi, không phải là scrollViews khung. Khi các thanh đã biến mất và UIScrollView là kích thước đầy đủ của màn hình (như nó phải được), các contentOffsetcontentInset như sau:

Content Offset: {0, -20} 
Content Inset: {20, 0, 44, 0} 

Khi các thanh có thể nhìn thấy và UIScrollView được đẩy xuống, contentOffsetcontentInset như sau:

Content Offset: {0, -64} 
Content Inset: {64, 0, 44, 0} 

Trả lời

3

Tôi đã nói chuyện với DTS về điều này và họ nói đây là hành vi được thiết kế và được khuyến nghị đính kèm UIScrollView cho phụ huynh UIView.

+0

Ban phước cho bạn! Tôi chỉ xé tóc ra. –

-1

Cố gắng được thiết lập:

self.view.frame = CGRectMake(0.f, -44.f, 320.f 480.f); 

Nó có thể không kích thước như bạn muốn, nhưng bạn có thể điều chỉnh nó ...

+0

Tôi đã cập nhật, đó là contentOffset đang thay đổi không phải khung. Tôi biết tôi có thể điều chỉnh contentOffset để bù đắp cho điều này, nhưng cố gắng tìm một giải pháp tốt hơn. –

+0

Tôi không nghĩ rằng có một giải pháp tốt hơn là ghi đè lên một số giá trị mà bộ điều khiển điều hướng sẽ tự động thay đổi. Nó sẽ là khung hoặc bù đắp nội dung. Bạn có thể có một UIView bình thường cho self.view, sau đó thêm UIScrollView làm subview và chơi xung quanh với frame hoặc contentOffset, nhưng không có một thuộc tính chung như 'resizeMyControllersMainView' để đặt nó thành' NO' ... – graver

5

tôi giải quyết một vấn đề tương tự trên iOS7 sau khi đọc UI Hướng dẫn chuyển tiếp của Apple: https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

Hóa ra UIViewControllerautomaticallyAdjustsScrollViewInsets tài sản boolean. Mặc định là đúng, vô hiệu hóa điều này làm cho số UIScrollView của tôi lấp đầy toàn bộ cửa sổ, thay vì bị đẩy xuống.

Các vấn đề liên quan