2013-08-08 36 views
5

Tôi gặp sự cố khi tìm ra vấn đề này trên uiscrollview của mình. Các nội dung bên trong uiscrollview của tôi di chuyển lên sau khi nhấp vào một nút để đẩy một bộ điều khiển xem mới lên màn hình, và sau đó quay trở lại bộ điều khiển xem ban đầu. Lưu ý cách đầu cuộn thay đổi.UIScrollview chuyển nội dung lên sau khi cuộn xuống và đẩy trình kiểm soát chế độ xem mới

enter image description hereenter image description here

Đây là mã cho scrollview

- (void)viewDidLoad{ 
    [super viewDidLoad]; 

    [scroll setScrollEnabled:YES]; 
    [scroll setContentSize:CGSizeMake(923, 934)]; 
    [self.view addSubview:scroll]; 
} 
+0

Viết này - (void) viewDidAppear: Phương pháp (BOOL) hoạt hình [scrollview setContentOffset: CGPointMake (0,0) hoạt hình: YES]; – CRDave

+0

Khi tôi thực hiện việc này, lần xem trước sẽ chuyển lên đầu, nhưng mọi thứ vẫn được chuyển lên (phần trên cùng của nội dung vẫn nằm ngoài tầm nhìn). – Alexyuiop

+0

chỉ nhận thấy điều này có vẻ khó hiểu với người khác, vì vậy tôi đã thêm ảnh mới của ca – Alexyuiop

Trả lời

4

tôi giải quyết vấn đề

-(void)viewWillAppear:(BOOL)animated{ 

    [scroll setContentOffset:CGPointMake(0,0)]; 

} 
3

Tôi nghĩ rằng đây là do cách mà các autoLayout được thực hiện khi tạo quan điểm. Đối với một số lý do khi bạn lần đầu tiên thêm một lần xem màn hình (scrollview), tọa độ của khung nhìn không bao gồm dưới thanh điều hướng, nhưng sau khi một khung nhìn khác được thêm vào, chúng thực hiện. Một cách mà tôi nhận được xung quanh điều này là bằng cách tạo ra một khung nhìn trống và thêm nó như là một khung nhìn con trước khi thêm scrollView.

Chẳng hạn như:

UIView *vi = [[UIView alloc] initWithFrame:CGRectMake(-10, -10, 1, 1)] 
[vi setBackgroundColor:[UIColor clearColor]]; 
[self.view addSubview:vi]; 
//Then add scrollView 

này chỉ tạo ra một cái nhìn 1x1 offscreen rõ ràng và thêm nó vào giao diện chính mà làm cho giao diện chính đúng cách xác định vị trí riêng của mình trước khi thêm scrollview.

Bạn cũng có thể muốn thay đổi toạ độ y của scrollView của mình, vì làm điều này với mã hiện tại của bạn sẽ làm cho nó luôn hoạt động như trong trường hợp thứ hai.

tôi thường làm:

frame.y+=self.navigationController.navigationBar.frame.size.height + 20; 

mà thêm chiều cao thanh điều hướng và chiều cao thanh trạng thái (20).

+0

Khi tôi làm scroll.frame.origin.y + = self.navigationController.navigationBar.frame.size.height + 20; nó mang lại cho tôi một lỗi "Biểu thức không thể gán" – Alexyuiop

+0

Bạn không cần phải làm điều đó, nhưng khi bạn tạo scrollView, hãy thêm số đó vào bất cứ điều gì y đã có. – Jsdodgers

+0

Nhưng điều đó không làm thay đổi toàn bộ thứ xuống 20 khi nó tải? Tôi chỉ gặp vấn đề này khi di chuyển xuống và sau đó đẩy một bộ điều khiển xem mới. Ban đầu, scrollview luôn tải tốt, nhưng chỉ sau khi cuộn xuống, đẩy các khung nhìn, và sau đó quay trở lại thì toàn bộ sự thay đổi là – Alexyuiop

1

Lúc đầu, tôi sử dụng câu trả lời của bạn) Nhưng sau một thời gian tôi thấy giải pháp làm thế nào để khắc phục vấn đề này mà không cần cuộn từng nội dung thời gian để đầu trang. Hy vọng nó sẽ làm việc cho bạn)

https://stackoverflow.com/a/22699785/246598

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