Dr0ptp4kt has submitted this change and it was merged.
Change subject: Fix so status bar tap causes web view to scroll to top on iOS 6
and 7.
......................................................................
Fix so status bar tap causes web view to scroll to top on iOS 6 and 7.
Also causes both web view and TOC to scroll to top if TOC
had been scrolled down at all.
Fixes search results title bar tap scroll to top too.
Change-Id: I06351e590f3f896dcf962f4c34a9a1552fb9825d
---
M Wikipedia.xcodeproj/project.pbxproj
A wikipedia/Categories/UIScrollView+WMFScrollsToTop.h
A wikipedia/Categories/UIScrollView+WMFScrollsToTop.m
M wikipedia/View Controllers/References/ReferenceVC.m
M wikipedia/View Controllers/SearchResults/SearchResultsController.m
M wikipedia/View Controllers/SectionEditor/SectionEditorViewController.m
M wikipedia/View Controllers/TableOfContents/TOCViewController.m
M wikipedia/View Controllers/WebView/WebViewController.m
M wikipedia/View Controllers/WebView/WebViewController_Private.h
9 files changed, 77 insertions(+), 29 deletions(-)
Approvals:
Dr0ptp4kt: Looks good to me, approved
Bgerstle: Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/Wikipedia.xcodeproj/project.pbxproj
b/Wikipedia.xcodeproj/project.pbxproj
index e35b6ba..71214a4 100644
--- a/Wikipedia.xcodeproj/project.pbxproj
+++ b/Wikipedia.xcodeproj/project.pbxproj
@@ -127,6 +127,8 @@
0487048E19F8262600B7D307 /* WikipediaZeroMessageFetcher.m in
Sources */ = {isa = PBXBuildFile; fileRef = 0487047919F8262600B7D307 /*
WikipediaZeroMessageFetcher.m */; };
0487048F19F8262600B7D307 /* WikiTextSectionFetcher.m in Sources
*/ = {isa = PBXBuildFile; fileRef = 0487047B19F8262600B7D307 /*
WikiTextSectionFetcher.m */; };
0487049019F8262600B7D307 /* WikiTextSectionUploader.m in
Sources */ = {isa = PBXBuildFile; fileRef = 0487047D19F8262600B7D307 /*
WikiTextSectionUploader.m */; };
+ 048830D21AB775E3005BF3A1 /* UIScrollView+WMFScrollsToTop.m in
Sources */ = {isa = PBXBuildFile; fileRef = 048830D11AB775E3005BF3A1 /*
UIScrollView+WMFScrollsToTop.m */; };
+ 048830D31AB775E3005BF3A1 /* UIScrollView+WMFScrollsToTop.m in
Sources */ = {isa = PBXBuildFile; fileRef = 048830D11AB775E3005BF3A1 /*
UIScrollView+WMFScrollsToTop.m */; };
0493C2CC1952373100EBB973 /* DataHousekeeping.m in Sources */ =
{isa = PBXBuildFile; fileRef = 0493C2CB1952373100EBB973 /* DataHousekeeping.m
*/; };
0493C2D419526A0100EBB973 /* WikiFont-Glyphs.ttf in Resources */
= {isa = PBXBuildFile; fileRef = 0493C2D319526A0100EBB973 /*
WikiFont-Glyphs.ttf */; };
049566C218F5F4CB0058EA12 /* ZeroConfigState.m in Sources */ =
{isa = PBXBuildFile; fileRef = 049566C118F5F4CB0058EA12 /* ZeroConfigState.m
*/; };
@@ -583,6 +585,8 @@
0487047B19F8262600B7D307 /* WikiTextSectionFetcher.m */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc;
path = WikiTextSectionFetcher.m; sourceTree = "<group>"; };
0487047C19F8262600B7D307 /* WikiTextSectionUploader.h */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path
= WikiTextSectionUploader.h; sourceTree = "<group>"; };
0487047D19F8262600B7D307 /* WikiTextSectionUploader.m */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc;
path = WikiTextSectionUploader.m; sourceTree = "<group>"; };
+ 048830D01AB775E3005BF3A1 /* UIScrollView+WMFScrollsToTop.h */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h;
path = "UIScrollView+WMFScrollsToTop.h"; sourceTree = "<group>"; };
+ 048830D11AB775E3005BF3A1 /* UIScrollView+WMFScrollsToTop.m */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.objc; path = "UIScrollView+WMFScrollsToTop.m"; sourceTree =
"<group>"; };
0493C2CA1952373100EBB973 /* DataHousekeeping.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
DataHousekeeping.h; sourceTree = "<group>"; };
0493C2CB1952373100EBB973 /* DataHousekeeping.m */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path
= DataHousekeeping.m; sourceTree = "<group>"; };
0493C2D319526A0100EBB973 /* WikiFont-Glyphs.ttf */ = {isa =
PBXFileReference; lastKnownFileType = file; path = "WikiFont-Glyphs.ttf";
sourceTree = "<group>"; };
@@ -1738,6 +1742,8 @@
04C695D118ED213000D9F2DA /*
UIScrollView+NoHorizontalScrolling.m */,
04DB0BE818BD37F900B4BCF3 /*
UIScrollView+ScrollSubviewToLocation.h */,
04DB0BE918BD37F900B4BCF3 /*
UIScrollView+ScrollSubviewToLocation.m */,
+ 048830D01AB775E3005BF3A1 /*
UIScrollView+WMFScrollsToTop.h */,
+ 048830D11AB775E3005BF3A1 /*
UIScrollView+WMFScrollsToTop.m */,
0484E3DC19D9D19B0085D18D /*
UIView+ConstraintsScale.h */,
0484E3DD19D9D19B0085D18D /*
UIView+ConstraintsScale.m */,
04AE520319DB5E0900F89B92 /*
NSObject+ConstraintsScale.h */,
@@ -2808,6 +2814,7 @@
BCDB75C41AB0E8300005593F /*
WMFSubstringUtilsTests.m in Sources */,
BC0FED6D1AAA0268002488D7 /*
MWKHistoryListTests.m in Sources */,
BC0FED731AAA026C002488D7 /*
NSMutableDictionary+MaybeSetTests.m in Sources */,
+ 048830D31AB775E3005BF3A1 /*
UIScrollView+WMFScrollsToTop.m in Sources */,
BC0FED6E1AAA0268002488D7 /* MWKImageListTests.m
in Sources */,
04D686F51AB2949C0009B44A /* MenuButton.m in
Sources */,
BC0FED701AAA026C002488D7 /*
NSArray+PredicateTests.m in Sources */,
@@ -2954,6 +2961,7 @@
047ED63918C13E4900442BE3 /* PreviewWebView.m in
Sources */,
0480AEA01AA4F4DA00A9950C /*
WMFIntrinsicContentSizeAwareTableView.m in Sources */,
04B6925018E77B2A00F88D8A /*
UIWebView+HideScrollGradient.m in Sources */,
+ 048830D21AB775E3005BF3A1 /*
UIScrollView+WMFScrollsToTop.m in Sources */,
047E95511996DD030046A122 /*
NearbyViewController.m in Sources */,
04AE520519DB5E0900F89B92 /*
NSObject+ConstraintsScale.m in Sources */,
BC86B9401A929D7900B4C039 /*
UICollectionViewFlowLayout+WMFItemSizeThatFits.m in Sources */,
diff --git a/wikipedia/Categories/UIScrollView+WMFScrollsToTop.h
b/wikipedia/Categories/UIScrollView+WMFScrollsToTop.h
new file mode 100644
index 0000000..d5b2561
--- /dev/null
+++ b/wikipedia/Categories/UIScrollView+WMFScrollsToTop.h
@@ -0,0 +1,16 @@
+// Created by Monte Hurd on 3/16/15.
+// Copyright (c) 2015 Wikimedia Foundation. Provided under MIT-style license;
please copy and modify!
+
+
+#import <UIKit/UIKit.h>
+
+@interface UIScrollView (WMFScrollsToTop)
+
+/*
+ Status bar taps only cause a scroll view to scroll to top if there is one
+ and only one scroll view with "scrollsToTop" set to YES. This method
+ ensures this scroll view's "scrollToTop" is the only one set to YES.
+ */
+- (void)wmf_shouldScrollToTopOnStatusBarTap:(BOOL)shouldScrollOnTap;
+
+@end
diff --git a/wikipedia/Categories/UIScrollView+WMFScrollsToTop.m
b/wikipedia/Categories/UIScrollView+WMFScrollsToTop.m
new file mode 100644
index 0000000..5a9d1a4
--- /dev/null
+++ b/wikipedia/Categories/UIScrollView+WMFScrollsToTop.m
@@ -0,0 +1,29 @@
+// Created by Monte Hurd on 3/16/15.
+// Copyright (c) 2015 Wikimedia Foundation. Provided under MIT-style license;
please copy and modify!
+
+#import "UIScrollView+WMFScrollsToTop.h"
+
+@implementation UIScrollView (WMFScrollsToTop)
+
+- (void)wmf_shouldScrollToTopOnStatusBarTap:(BOOL)shouldScrollOnTap {
+ if (shouldScrollOnTap) {
+ UIViewController* rootViewController =
+ (UIViewController*)[[[UIApplication sharedApplication] delegate]
window].rootViewController;
+ [self recursivelyDisableScrollsToTop:rootViewController.view];
+ }
+ self.scrollsToTop = shouldScrollOnTap;
+}
+
+- (void)recursivelyDisableScrollsToTop:(UIView*)view {
+ for (UIView* subview in [view subviews]) {
+ if ([subview isKindOfClass:[UIScrollView class]]) {
+ UIScrollView* scrollView = (UIScrollView*)subview;
+ if ([scrollView scrollsToTop]) {
+ scrollView.scrollsToTop = NO;
+ }
+ }
+ [self recursivelyDisableScrollsToTop:subview];
+ }
+}
+
+@end
diff --git a/wikipedia/View Controllers/References/ReferenceVC.m
b/wikipedia/View Controllers/References/ReferenceVC.m
index bae6af7..eef521d 100644
--- a/wikipedia/View Controllers/References/ReferenceVC.m
+++ b/wikipedia/View Controllers/References/ReferenceVC.m
@@ -8,6 +8,7 @@
#import "WikipediaAppUtils.h"
#import "UIWebView+ElementLocation.h"
#import "Defines.h"
+#import "UIScrollView+WMFScrollsToTop.h"
#define REFERENCE_LINK_COLOR @"#2b6fb2"
@@ -94,8 +95,9 @@
// Prevent this web view from blocking the article web view from scrolling
to top
// when title bar tapped. (Only one scroll view can have scrollsToTop set
to YES for
// the title bar tap to cause scroll-to-top.)
- self.referenceWebView.scrollView.scrollsToTop = NO;
- self.referenceWebView.delegate = self;
+ [self.referenceWebView.scrollView wmf_shouldScrollToTopOnStatusBarTap:NO];
+
+ self.referenceWebView.delegate = self;
NSString* domain = [SessionSingleton
sharedInstance].currentArticleSite.language;
MWLanguageInfo* languageInfo = [MWLanguageInfo languageInfoForCode:domain];
diff --git a/wikipedia/View Controllers/SearchResults/SearchResultsController.m
b/wikipedia/View Controllers/SearchResults/SearchResultsController.m
index c8ba43f..a04ca33 100644
--- a/wikipedia/View Controllers/SearchResults/SearchResultsController.m
+++ b/wikipedia/View Controllers/SearchResults/SearchResultsController.m
@@ -24,6 +24,7 @@
#import "NSArray+WMFExtensions.h"
#import <BlocksKit/BlocksKit.h>
#import "WMFIntrinsicContentSizeAwareTableView.h"
+#import "UIScrollView+WMFScrollsToTop.h"
static NSString* const kWMFSearchCellID = @"SearchResultCell";
static CGFloat const kWMFSearchDelay = 0.4;
@@ -189,11 +190,6 @@
- (void)viewDidLoad {
[super viewDidLoad];
- if (self.type == WMFSearchResultsControllerTypeReadMore) {
- self.searchResultsTable.scrollEnabled = NO;
- self.searchResultsTable.scrollsToTop = NO;
- }
-
[self setupStringAttributes];
self.ignoreScrollEvents = NO;
@@ -233,6 +229,16 @@
self.offScreenSizingCell = (SearchResultCell*)[self.searchResultsTable
dequeueReusableCellWithIdentifier:kWMFSearchCellID];
}
+- (void)viewDidAppear:(BOOL)animated {
+ [super viewDidAppear:animated];
+ if (self.type == WMFSearchResultsControllerTypeReadMore) {
+ self.searchResultsTable.scrollEnabled = NO;
+ [self.searchResultsTable wmf_shouldScrollToTopOnStatusBarTap:NO];
+ } else {
+ [self.searchResultsTable wmf_shouldScrollToTopOnStatusBarTap:YES];
+ }
+}
+
- (void)dealloc {
[self.recentSearchesViewController removeObserver:self
forKeyPath:@"recentSearchesItemCount"];
}
diff --git a/wikipedia/View
Controllers/SectionEditor/SectionEditorViewController.m b/wikipedia/View
Controllers/SectionEditor/SectionEditorViewController.m
index 763649b..c5db556 100644
--- a/wikipedia/View Controllers/SectionEditor/SectionEditorViewController.m
+++ b/wikipedia/View Controllers/SectionEditor/SectionEditorViewController.m
@@ -17,6 +17,7 @@
#import "RootViewController.h"
#import "TopMenuViewController.h"
+#import "UIScrollView+WMFScrollsToTop.h"
#define EDIT_TEXT_VIEW_FONT [UIFont systemFontOfSize:16.0f *
MENUS_SCALE_MULTIPLIER]
#define EDIT_TEXT_VIEW_LINE_HEIGHT_MIN (25.0f * MENUS_SCALE_MULTIPLIER)
@@ -89,7 +90,7 @@
[self registerForKeyboardNotifications];
- [self setScrollsToTop:YES];
+ [self.editTextView wmf_shouldScrollToTopOnStatusBarTap:YES];
// Listen for nav bar taps.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(navItemTappedNotification:) name:@"NavItemTapped"
object:nil];
@@ -110,8 +111,6 @@
}
- (void)viewWillDisappear:(BOOL)animated {
- [self setScrollsToTop:NO];
-
[self unRegisterForKeyboardNotifications];
[self highlightProgressiveButton:NO];
@@ -141,18 +140,6 @@
break;
default:
break;
- }
-}
-
-- (void)setScrollsToTop:(BOOL)scrollsToTop {
- // A view controller's UIScrollView will only scroll to top (if title bar
tapped) if
- // its UIScrollView the *only* one with "scrollsToTop" set to YES.
- self.editTextView.scrollsToTop = scrollsToTop;
- for (UIView* v in [self.parentViewController.view.subviews copy]) {
- if ([v respondsToSelector:@selector(scrollView)]) {
- UIScrollView* s = [v performSelector:@selector(scrollView)
withObject:nil];
- s.scrollsToTop = !scrollsToTop;
- }
}
}
diff --git a/wikipedia/View Controllers/TableOfContents/TOCViewController.m
b/wikipedia/View Controllers/TableOfContents/TOCViewController.m
index 8eedc34..2c3275a 100644
--- a/wikipedia/View Controllers/TableOfContents/TOCViewController.m
+++ b/wikipedia/View Controllers/TableOfContents/TOCViewController.m
@@ -10,6 +10,7 @@
#import "MWKSection+TOC.h"
#import "UIView+ConstraintsScale.h"
#import "Defines.h"
+#import "UIScrollView+WMFScrollsToTop.h"
//#import "UIView+Debugging.h"
#define TOC_SELECTION_OFFSET_Y (48.0f * MENUS_SCALE_MULTIPLIER)
@@ -90,8 +91,7 @@
- (void)didHide {
[self.funnel logClose];
- self.scrollView.scrollsToTop = NO;
- self.webVC.webView.scrollView.scrollsToTop = YES;
+ [self.webVC.webView.scrollView wmf_shouldScrollToTopOnStatusBarTap:YES];
self.view.hidden = YES;
}
@@ -116,8 +116,7 @@
// Now move selected item to top.
[self updateTOCForWebviewScrollPositionAnimated:NO];
- self.scrollView.scrollsToTop = YES;
- self.webVC.webView.scrollView.scrollsToTop = NO;
+ [self.scrollView wmf_shouldScrollToTopOnStatusBarTap:YES];
[self.funnel logOpen];
}
diff --git a/wikipedia/View Controllers/WebView/WebViewController.m
b/wikipedia/View Controllers/WebView/WebViewController.m
index 1bfb409..204e4a3 100644
--- a/wikipedia/View Controllers/WebView/WebViewController.m
+++ b/wikipedia/View Controllers/WebView/WebViewController.m
@@ -147,9 +147,6 @@
self.view.backgroundColor = CHROME_COLOR;
- self.webView.scrollView.scrollsToTop = YES;
- self.tocVC.scrollView.scrollsToTop = NO;
-
// Uncomment these lines only if testing onboarding!
// These lines allow the onboarding to run on every app cold start.
//[[NSUserDefaults standardUserDefaults] setObject:@YES
forKey:@"ShowOnboarding"];
@@ -211,6 +208,8 @@
} else {
[self doStuffOnAppear];
}
+
+ [self.webView.scrollView wmf_shouldScrollToTopOnStatusBarTap:YES];
}
-
(void)dataMigrationProgressComplete:(DataMigrationProgressViewController*)viewController
{
diff --git a/wikipedia/View Controllers/WebView/WebViewController_Private.h
b/wikipedia/View Controllers/WebView/WebViewController_Private.h
index 6177828..acc1f17 100644
--- a/wikipedia/View Controllers/WebView/WebViewController_Private.h
+++ b/wikipedia/View Controllers/WebView/WebViewController_Private.h
@@ -65,6 +65,8 @@
#import "UIViewController+WMFChildViewController.h"
#import "WMFWebViewFooterViewController.h"
+#import "UIScrollView+WMFScrollsToTop.h"
+
//#import "UIView+Debugging.h"
#define TOC_TOGGLE_ANIMATION_DURATION @0.225f
--
To view, visit https://gerrit.wikimedia.org/r/197244
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I06351e590f3f896dcf962f4c34a9a1552fb9825d
Gerrit-PatchSet: 2
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mhurd <[email protected]>
Gerrit-Reviewer: Bgerstle <[email protected]>
Gerrit-Reviewer: Dr0ptp4kt <[email protected]>
Gerrit-Reviewer: Fjalapeno <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits