Vì vậy, trong một UITableView khi bạn có phần xem phần dính vào đầu cho đến khi phần tiếp theo chồng chéo nó và sau đó nó thay thế nó trên đầu trang. Tôi muốn có một hiệu ứng tương tự, nơi mà về cơ bản tôi có một UIView trong UIScrollView của tôi, đại diện cho các phần UIView và khi nó chạm vào đầu .. Tôi muốn nó ở lại đó và không được thực hiện. Làm thế nào để tôi làm điều này? Tôi nghĩ rằng điều này cần phải được thực hiện trong cả layoutSubviews hoặc scrollViewDidScroll và thực hiện thao tác trên UIVIew ..làm cho UIView trong UIScrollView dính lên trên cùng khi cuộn lên
Trả lời
Nếu tôi nhớ chính xác, bản trình bày 2010 WWDC ScrollView thảo luận chính xác cách giữ chế độ xem ở vị trí cố định trong khi các yếu tố khác cuộn xung quanh . Xem video và bạn nên có cách tiếp cận rõ ràng để triển khai.
Về cơ bản, việc cập nhật khung dựa trên các cuộc gọi lại scrollViewDidScroll (mặc dù bộ nhớ hơi mờ về các điểm tốt hơn).
Để tạo UIView trong UIScrollView dính vào đầu khi cuộn lên làm:
- (void)createHeaderView:(UIView*)headerView {
_headerView = [headerView retain];
_headerViewInitialY = _headerView.frame.origin.y;
[_scrollView addSubview:_headerView];
_scrollView.delegate = self;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGRect headerFrame = _headerView.frame;
headerFrame.origin.y = MAX(_headerViewInitialY, scrollView.contentOffset.y);
_headerView.frame = headerFrame;
}
Thực sự có vẻ tốt – svmrajesh
Đảm bảo rằng chế độ xem bạn dự định bắt cuộn có bộ đại biểu và đại biểu đó là nơi scrollViewDidScroll sẽ hoạt động. Nếu bạn để cho trình điều khiển của bạn thực hiện giao thức
Tôi đã thử nó và nó hoạt động tốt nhưng quan điểm của tôi nhận được mờ và tôi đã thử tất cả mọi thứ nhưng không thành công, vì vậy xin vui lòng bạn có thể giúp tôi cách hay lý do tại sao nó đang xảy ra. Nó chỉ nhận được mờ trong một thời gian cho đến khi nó dính vào đầu – Soniya
Swift Giải pháp dựa trên phản ứng EVYA của:
var navigationBarOriginalOffset : CGFloat?
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
navigationBarOriginalOffset = navigationBar.frame.origin.y
}
func scrollViewDidScroll(scrollView: UIScrollView) {
navigationBar.frame.origin.y = max(navigationBarOriginalOffset!, scrollView.contentOffset.y)
}
giải pháp Evya của hoạt động thực sự tốt, tuy nhiên nếu bạn sử dụng Auto Bố cục, bạn nên làm một cái gì đó như thế này (Cú pháp bố cục tự động được viết bằng Masonry, nhưng bạn có ý tưởng.):
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
//Make the header view sticky to the top.
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.scrollView.mas_top).with.offset(scrollView.contentOffset.y);
make.left.equalTo(self.scrollView.mas_left);
make.right.equalTo(self.scrollView.mas_right);
make.height.equalTo(@(headerViewHeight));
}];
[self.scrollView bringSubviewToFront:self.headerView];
}
Thật không may này buộc bạn phải tái tạo các ràng buộc bố trí với mỗi khung di chuyển di chuyển. Thay vào đó, những gì bạn nên làm là có một thùng chứa chứa 'UIScrollView' và làm cho đầu trang bằng với đầu * của * container, chứ không phải phần bù đầu nội dung của scrollview. Làm theo cách này cho phép bạn thiết lập các ràng buộc một lần. –
mas_updateConstraints – Jaro
- 1. Cuộn lên trên cùng khi nhấn vào thanh trạng thái
- 2. Jquery dính nav chỉ khi di chuyển lên
- 3. iPhone - UIScrollView bên trong UIView không cuộn
- 4. UIScrollView và CATiledLayer từ dưới lên
- 5. Làm cho UIView cuộn với UITableView nhưng ghim lên đầu ra khỏi chế độ xem
- 6. jquery autocomplete làm cho mCustomScrollbar cuộn lên trên trên
- 7. Làm cách nào để cuộn trang mẹ lên trên cùng khi trang con nhấp vào iframe?
- 8. Làm cách nào để làm cho UIWebView cuộn lên đầu?
- 9. Moving UIView từ dưới lên trên
- 10. UIScrollView xác định hướng cuộn trên scrollViewDidEndDragging khi phân trang
- 11. Sửa đối tượng lên trên cùng của cửa sổ trình duyệt khi cuộn
- 12. Cuộn UITableView bên trong UIScrollView
- 13. jQuery UI datepicker khiến màn hình cuộn lên trên cùng sau khi chọn một ngày
- 14. UITableView cuộn lên trên cùng khi chạm vào thanh trạng thái ở trên cùng của màn hình
- 15. Cuộn lên trên bằng plugin slimscroll
- 16. nội dung nhảy lên thu nhỏ với UIScrollView
- 17. Cách dừng UITextView khi cuộn lên khi nhập vào
- 18. Gắn bó Div lên đầu sau khi cuộn qua nó
- 19. UIScrollView tạm dừng NSTimer trong khi cuộn
- 20. Tôi làm cách nào để tải 100 trang trở lên trong UIScrollView khi bật phân trang?
- 21. Chèn phần UITableView ở trên cùng trong khi cuộn
- 22. UIScrollview gọi superviews layoutSubviews khi cuộn?
- 23. iOS: Đặt UIView lên trên UITableView ở vị trí cố định
- 24. Android ListView cuộn lên đầu
- 25. window.location.hash = ""; ngăn cuộn lên đầu?
- 26. Cách cuộn QPlainTextEdit lên đầu trang?
- 27. Cách cuộn lên trong Emacs ansi-term
- 28. Cách đặt vị trí cuộn lên trên cùng của chế độ xem danh sách
- 29. 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
- 30. JQuery cuộn lên đầu trang
hmm .. về cơ bản bạn phải kiểm tra xem phần UIView có nằm trên đầu và sau đó giữ nó ở đó phải không? Vấn đề của tôi là làm cách nào để xác định xem UIView được chia nhỏ có nằm trên "top" – xonegirlz
Để xác định chế độ xem nào ở trên cùng hay không, bạn có thể yêu cầu người giám sát xem đó là một loạt các bản xem trước, ví dụ: NSArray * subviews = [superview subviews]. Sau đó, yêu cầu mảng của bạn cho các chỉ mục của các bản xem phụ bạn muốn so sánh, ví dụ: NSUInteger oneIndex = [subviews indexOfObject: viewOne], haiIndex = [subviews indexOfObject: viewTwo]. Một khi bạn đã đi các chỉ mục cho cả hai bản xem trước, chỉ cần đánh giá cái nào là lớn hơn để xác định cái nào nằm trên đầu trang của cái kia. – isaac
khi tôi nói trên đầu, không có nghĩa là trên đầu trang của mỗi khác .. nhưng tôi có nghĩa là đó là contentOffSet.y – xonegirlz