Tôi muốn ẩn cả hai thanh khi cuộn xuống trên iPhone của mình. Khi tôi cuộn lên, chúng sẽ xuất hiện trở lại .. Làm thế nào tôi có thể xử lý điều này?Xcode/iOS: Cách ẩn Navigation- AND ToolBar khi cuộn xuống?
Trả lời
Câu trả lời được chấp nhận không phù hợp với tôi, vì scrollViewWillBeginScroll:
không phải là phương thức ủy nhiệm.
Thay vào đó tôi làm
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldHide" object:self];
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView
willDecelerate:(BOOL)decelerate
{
if(!decelerate)
[[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide"
object:self];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide"
object:self];
}
Anywhere trong các đối tượng ứng dụng có thể nghe được thông báo này, như
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldHide"
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
//hide tab bar with animation;
}];
[[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldUnhide"
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
//Unhide tab bar with animation;
}];
}
Mã này sẽ ẩn các thanh cuộn cho bất kỳ. nếu bạn muốn chỉ có trên xuống, cùng một thủ thuật locationOffset
như trong câu trả lời được chấp nhận sẽ hoạt động.
- (void)scrollViewWillBeginScroll :(UIScrollView *)scrollView {
if (scrollView.contentOffset.y < lastOffset.y) {
[toolBar setHidden:YES];
[[[self navigationController] navigationBar] setHidden:YES];
} else{
// unhide
}
}
- (void)scrollViewDidScroll :(UIScrollView *)scrollView {
/// blah blah
lastOffset = scrollView.contentOffset;
}
Note: lastOffset
là một CGPoint
và nó đi trong tập tin tiêu đề của bạn: @Interface
.
Đây là giải pháp của tôi trong Swift; nó hoạt động tuyệt đẹp
func scrollViewDidScroll(scrollView: UIScrollView) {
let navController: UINavigationController = self.navigationController!
if self.collectionView.panGestureRecognizer.translationInView(self.view).y <= 0.0 {
defaultCenter.postNotificationName("stuffShouldHide", object: self)
} else {
defaultCenter.postNotificationName("stuffShouldUnhide", object: self)
}
}
Bạn có thể kiểm tra điều này, có sẵn từ iOS8, tôi nghĩ rằng đây là điều ngược lại những gì bạn đang tìm kiếm ... nhưng giá trị kiểm tra vì nó là một cái gì đó tiêu chuẩn và đây là cách Safari hoạt động.
Swift
var hidesBarsOnSwipe: Bool
Objective-C
@property (nonatomic, readwrite, chuyển nhượng) BOOL hidesBarsOnSwipe Thảo luận
Khi thuộc tính này được thiết lập để YES , một lần vuốt lên sẽ ẩn thanh điều hướng và thanh công cụ. Một lần vuốt xuống sẽ hiển thị lại cả hai thanh. Nếu thanh công cụ không có bất kỳ mục nào, nó vẫn hiển thị ngay cả sau khi vuốt . Giá trị mặc định của thuộc tính này là NO.
Bạn đã cố gắng sử dụng 'setToolbarHidden: animated:' và 'setNavigationBarHidden: animated:' in 'scrollViewDidScroll:' khi giá trị x của 'contentOffset' tăng lên. – dasdom
Vui lòng sử dụng tiếng Anh tại đây. Đây là một nền tảng cho mọi người từ khắp nơi trên thế giới. Khi chúng tôi bắt đầu nói chuyện bằng tiếng Đức, rất nhiều người không thể theo kịp. Khi bạn cần lời khuyên bằng tiếng Đức, hãy gửi cho tôi một email. Tôi nghĩ, để tìm địa chỉ email của tôi không khó với thông tin bạn có thể tìm thấy trong tiểu sử của mình. – dasdom