Browse Source

MD + Carthage

1.修改MD
2.支持Carthage
3.完善contentInset的设置
M了个J 8 years ago
parent
commit
5716324dd7

+ 1 - 1
MJRefresh.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
     s.name         = 'MJRefresh'
-    s.version      = '3.1.13'
+    s.version      = '3.1.14'
     s.summary      = 'An easy way to use pull-to-refresh'
     s.homepage     = 'https://github.com/CoderMJLee/MJRefresh'
     s.license      = 'MIT'

+ 2 - 1
MJRefresh/Base/MJRefreshComponent.h

@@ -68,7 +68,8 @@ typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)();
 - (void)endRefreshing;
 - (void)endRefreshingWithCompletionBlock:(void (^)())completionBlock;
 /** 是否正在刷新 */
-- (BOOL)isRefreshing;
+@property (assign, nonatomic, readonly, getter=isRefreshing) BOOL refreshing;
+//- (BOOL)isRefreshing;
 /** 刷新状态 一般交给子类内部实现 */
 @property (assign, nonatomic) MJRefreshState state;
 

+ 1 - 1
MJRefresh/Base/MJRefreshComponent.m

@@ -95,7 +95,7 @@ - (void)addObservers
 - (void)removeObservers
 {
     [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset];
-    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];;
+    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];
     [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState];
     self.pan = nil;
 }

+ 10 - 0
MJRefresh/UIScrollView+MJExtension.m

@@ -60,6 +60,11 @@ - (void)setMj_insetL:(CGFloat)mj_insetL
 {
     UIEdgeInsets inset = self.contentInset;
     inset.left = mj_insetL;
+#ifdef __IPHONE_11_0
+    if(@available(iOS 11.0, *)){
+        inset.left -= (self.adjustedContentInset.left - self.contentInset.left);
+    }
+#endif
     self.contentInset = inset;
 }
 
@@ -72,6 +77,11 @@ - (void)setMj_insetR:(CGFloat)mj_insetR
 {
     UIEdgeInsets inset = self.contentInset;
     inset.right = mj_insetR;
+#ifdef __IPHONE_11_0
+    if(@available(iOS 11.0, *)){
+        inset.right -= (self.adjustedContentInset.right - self.contentInset.right);
+    }
+#endif
     self.contentInset = inset;
 }
 

+ 250 - 0
MJRefreshExample.xcodeproj/project.pbxproj

@@ -28,6 +28,46 @@
 		2D9BEB1A1BB15F4A00AED473 /* MJTestViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2D9BEB051BB15F4A00AED473 /* MJTestViewController.xib */; };
 		2D9BEB1B1BB15F4A00AED473 /* MJWebViewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEB071BB15F4A00AED473 /* MJWebViewViewController.m */; };
 		2D9BEB1C1BB15F4A00AED473 /* MJWebViewViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2D9BEB081BB15F4A00AED473 /* MJWebViewViewController.xib */; };
+		2D9DF45A1F7CE2C20042D6DD /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2E9EC1BECBE6700D58F6A /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF45B1F7CE2C20042D6DD /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2E9EE1BECBE6700D58F6A /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF45C1F7CE2C20042D6DD /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2E9F01BECBE6700D58F6A /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF45D1F7CE2C20042D6DD /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2E9F21BECBE6700D58F6A /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF45E1F7CE2C20042D6DD /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2E9F41BECBE6700D58F6A /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF45F1F7CE2C20042D6DD /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2E9F91BECBE6700D58F6A /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4601F7CE2C20042D6DD /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2E9FB1BECBE6700D58F6A /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4611F7CE2C20042D6DD /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2E9FD1BECBE6700D58F6A /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4621F7CE2C20042D6DD /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA001BECBE6700D58F6A /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4631F7CE2C20042D6DD /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA021BECBE6700D58F6A /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4641F7CE2C20042D6DD /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA041BECBE6700D58F6A /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4651F7CE2C20042D6DD /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA071BECBE6700D58F6A /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4661F7CE2C20042D6DD /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA091BECBE6700D58F6A /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4671F7CE2C20042D6DD /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA0B1BECBE6700D58F6A /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4681F7CE2C20042D6DD /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA0E1BECBE6700D58F6A /* MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF4691F7CE2C20042D6DD /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA0F1BECBE6700D58F6A /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF46A1F7CE2C20042D6DD /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA111BECBE6700D58F6A /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF46B1F7CE2C20042D6DD /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA131BECBE6700D58F6A /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF46C1F7CE2C20042D6DD /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB2EA151BECBE6700D58F6A /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF46D1F7CE2C20042D6DD /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D4698841D0EE6A400CB8025 /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		2D9DF46E1F7CE2D60042D6DD /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2DB2EA0D1BECBE6700D58F6A /* MJRefresh.bundle */; };
+		2D9DF46F1F7CE2F90042D6DD /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2E9ED1BECBE6700D58F6A /* MJRefreshAutoFooter.m */; };
+		2D9DF4701F7CE2F90042D6DD /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2E9EF1BECBE6700D58F6A /* MJRefreshBackFooter.m */; };
+		2D9DF4711F7CE2F90042D6DD /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2E9F11BECBE6700D58F6A /* MJRefreshComponent.m */; };
+		2D9DF4721F7CE2F90042D6DD /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2E9F31BECBE6700D58F6A /* MJRefreshFooter.m */; };
+		2D9DF4731F7CE2F90042D6DD /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2E9F51BECBE6700D58F6A /* MJRefreshHeader.m */; };
+		2D9DF4741F7CE2F90042D6DD /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2E9FA1BECBE6700D58F6A /* MJRefreshAutoGifFooter.m */; };
+		2D9DF4751F7CE2F90042D6DD /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2E9FC1BECBE6700D58F6A /* MJRefreshAutoNormalFooter.m */; };
+		2D9DF4761F7CE2F90042D6DD /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2E9FE1BECBE6700D58F6A /* MJRefreshAutoStateFooter.m */; };
+		2D9DF4771F7CE2F90042D6DD /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA011BECBE6700D58F6A /* MJRefreshBackGifFooter.m */; };
+		2D9DF4781F7CE2F90042D6DD /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA031BECBE6700D58F6A /* MJRefreshBackNormalFooter.m */; };
+		2D9DF4791F7CE2F90042D6DD /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA051BECBE6700D58F6A /* MJRefreshBackStateFooter.m */; };
+		2D9DF47A1F7CE2F90042D6DD /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA081BECBE6700D58F6A /* MJRefreshGifHeader.m */; };
+		2D9DF47B1F7CE2F90042D6DD /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA0A1BECBE6700D58F6A /* MJRefreshNormalHeader.m */; };
+		2D9DF47C1F7CE2F90042D6DD /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA0C1BECBE6700D58F6A /* MJRefreshStateHeader.m */; };
+		2D9DF47D1F7CE2F90042D6DD /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA101BECBE6700D58F6A /* MJRefreshConst.m */; };
+		2D9DF47E1F7CE2F90042D6DD /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA121BECBE6700D58F6A /* UIScrollView+MJExtension.m */; };
+		2D9DF47F1F7CE2F90042D6DD /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA141BECBE6700D58F6A /* UIScrollView+MJRefresh.m */; };
+		2D9DF4801F7CE2F90042D6DD /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB2EA161BECBE6700D58F6A /* UIView+MJExtension.m */; };
+		2D9DF4811F7CE2F90042D6DD /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D4698851D0EE6A400CB8025 /* NSBundle+MJRefresh.m */; };
 		2DA7F92B1AA6B4C4005627AB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7F92A1AA6B4C4005627AB /* main.m */; };
 		2DA7F9341AA6B4C4005627AB /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2DA7F9321AA6B4C4005627AB /* Main.storyboard */; };
 		2DA7F9361AA6B4C4005627AB /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2DA7F9351AA6B4C4005627AB /* Images.xcassets */; };
@@ -64,6 +104,19 @@
 		};
 /* End PBXContainerItemProxy section */
 
+/* Begin PBXCopyFilesBuildPhase section */
+		2D9DF3EC1F7CD8F50042D6DD /* Embed Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+			);
+			name = "Embed Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
 /* Begin PBXFileReference section */
 		2D4698841D0EE6A400CB8025 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MJRefresh.h"; sourceTree = "<group>"; };
 		2D4698851D0EE6A400CB8025 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MJRefresh.m"; sourceTree = "<group>"; };
@@ -105,6 +158,8 @@
 		2D9BEB061BB15F4A00AED473 /* MJWebViewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJWebViewViewController.h; sourceTree = "<group>"; };
 		2D9BEB071BB15F4A00AED473 /* MJWebViewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJWebViewViewController.m; sourceTree = "<group>"; };
 		2D9BEB081BB15F4A00AED473 /* MJWebViewViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MJWebViewViewController.xib; sourceTree = "<group>"; };
+		2D9DF4521F7CE29B0042D6DD /* MJRefresh.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MJRefresh.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		2D9DF4551F7CE29B0042D6DD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		2DA7F9251AA6B4C4005627AB /* MJRefreshExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MJRefreshExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		2DA7F9291AA6B4C4005627AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		2DA7F92A1AA6B4C4005627AB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
@@ -156,6 +211,13 @@
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+		2D9DF44E1F7CE29B0042D6DD /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		2DA7F9221AA6B4C4005627AB /* Frameworks */ = {
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
@@ -246,11 +308,20 @@
 			path = Second;
 			sourceTree = "<group>";
 		};
+		2D9DF4531F7CE29B0042D6DD /* MJRefreshFramework */ = {
+			isa = PBXGroup;
+			children = (
+				2D9DF4551F7CE29B0042D6DD /* Info.plist */,
+			);
+			path = MJRefreshFramework;
+			sourceTree = "<group>";
+		};
 		2DA7F91C1AA6B4C4005627AB = {
 			isa = PBXGroup;
 			children = (
 				2DA7F9271AA6B4C4005627AB /* MJRefreshExample */,
 				2DA7F9411AA6B4C4005627AB /* MJRefreshExampleTests */,
+				2D9DF4531F7CE29B0042D6DD /* MJRefreshFramework */,
 				2DA7F9261AA6B4C4005627AB /* Products */,
 			);
 			sourceTree = "<group>";
@@ -260,6 +331,7 @@
 			children = (
 				2DA7F9251AA6B4C4005627AB /* MJRefreshExample.app */,
 				2DA7F93E1AA6B4C4005627AB /* MJRefreshExampleTests.xctest */,
+				2D9DF4521F7CE29B0042D6DD /* MJRefresh.framework */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -413,7 +485,55 @@
 		};
 /* End PBXGroup section */
 
+/* Begin PBXHeadersBuildPhase section */
+		2D9DF44F1F7CE29B0042D6DD /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2D9DF45A1F7CE2C20042D6DD /* MJRefreshAutoFooter.h in Headers */,
+				2D9DF45B1F7CE2C20042D6DD /* MJRefreshBackFooter.h in Headers */,
+				2D9DF45C1F7CE2C20042D6DD /* MJRefreshComponent.h in Headers */,
+				2D9DF45D1F7CE2C20042D6DD /* MJRefreshFooter.h in Headers */,
+				2D9DF45E1F7CE2C20042D6DD /* MJRefreshHeader.h in Headers */,
+				2D9DF45F1F7CE2C20042D6DD /* MJRefreshAutoGifFooter.h in Headers */,
+				2D9DF4601F7CE2C20042D6DD /* MJRefreshAutoNormalFooter.h in Headers */,
+				2D9DF4611F7CE2C20042D6DD /* MJRefreshAutoStateFooter.h in Headers */,
+				2D9DF4621F7CE2C20042D6DD /* MJRefreshBackGifFooter.h in Headers */,
+				2D9DF4631F7CE2C20042D6DD /* MJRefreshBackNormalFooter.h in Headers */,
+				2D9DF4641F7CE2C20042D6DD /* MJRefreshBackStateFooter.h in Headers */,
+				2D9DF4651F7CE2C20042D6DD /* MJRefreshGifHeader.h in Headers */,
+				2D9DF4661F7CE2C20042D6DD /* MJRefreshNormalHeader.h in Headers */,
+				2D9DF4671F7CE2C20042D6DD /* MJRefreshStateHeader.h in Headers */,
+				2D9DF4681F7CE2C20042D6DD /* MJRefresh.h in Headers */,
+				2D9DF4691F7CE2C20042D6DD /* MJRefreshConst.h in Headers */,
+				2D9DF46A1F7CE2C20042D6DD /* UIScrollView+MJExtension.h in Headers */,
+				2D9DF46B1F7CE2C20042D6DD /* UIScrollView+MJRefresh.h in Headers */,
+				2D9DF46C1F7CE2C20042D6DD /* UIView+MJExtension.h in Headers */,
+				2D9DF46D1F7CE2C20042D6DD /* NSBundle+MJRefresh.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
 /* Begin PBXNativeTarget section */
+		2D9DF4511F7CE29B0042D6DD /* MJRefreshFramework */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 2D9DF4571F7CE29B0042D6DD /* Build configuration list for PBXNativeTarget "MJRefreshFramework" */;
+			buildPhases = (
+				2D9DF44D1F7CE29B0042D6DD /* Sources */,
+				2D9DF44E1F7CE29B0042D6DD /* Frameworks */,
+				2D9DF44F1F7CE29B0042D6DD /* Headers */,
+				2D9DF4501F7CE29B0042D6DD /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = MJRefreshFramework;
+			productName = MJRefreshFramework;
+			productReference = 2D9DF4521F7CE29B0042D6DD /* MJRefresh.framework */;
+			productType = "com.apple.product-type.framework";
+		};
 		2DA7F9241AA6B4C4005627AB /* MJRefreshExample */ = {
 			isa = PBXNativeTarget;
 			buildConfigurationList = 2DA7F9481AA6B4C4005627AB /* Build configuration list for PBXNativeTarget "MJRefreshExample" */;
@@ -421,6 +541,7 @@
 				2DA7F9211AA6B4C4005627AB /* Sources */,
 				2DA7F9221AA6B4C4005627AB /* Frameworks */,
 				2DA7F9231AA6B4C4005627AB /* Resources */,
+				2D9DF3EC1F7CD8F50042D6DD /* Embed Frameworks */,
 			);
 			buildRules = (
 			);
@@ -459,6 +580,10 @@
 				LastUpgradeCheck = 0700;
 				ORGANIZATIONNAME = "小码哥";
 				TargetAttributes = {
+					2D9DF4511F7CE29B0042D6DD = {
+						CreatedOnToolsVersion = 9.0;
+						ProvisioningStyle = Automatic;
+					};
 					2DA7F9241AA6B4C4005627AB = {
 						CreatedOnToolsVersion = 6.1;
 					};
@@ -483,11 +608,20 @@
 			targets = (
 				2DA7F9241AA6B4C4005627AB /* MJRefreshExample */,
 				2DA7F93D1AA6B4C4005627AB /* MJRefreshExampleTests */,
+				2D9DF4511F7CE29B0042D6DD /* MJRefreshFramework */,
 			);
 		};
 /* End PBXProject section */
 
 /* Begin PBXResourcesBuildPhase section */
+		2D9DF4501F7CE29B0042D6DD /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2D9DF46E1F7CE2D60042D6DD /* MJRefresh.bundle in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		2DA7F9231AA6B4C4005627AB /* Resources */ = {
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -511,6 +645,32 @@
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
+		2D9DF44D1F7CE29B0042D6DD /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2D9DF46F1F7CE2F90042D6DD /* MJRefreshAutoFooter.m in Sources */,
+				2D9DF4701F7CE2F90042D6DD /* MJRefreshBackFooter.m in Sources */,
+				2D9DF4711F7CE2F90042D6DD /* MJRefreshComponent.m in Sources */,
+				2D9DF4721F7CE2F90042D6DD /* MJRefreshFooter.m in Sources */,
+				2D9DF4731F7CE2F90042D6DD /* MJRefreshHeader.m in Sources */,
+				2D9DF4741F7CE2F90042D6DD /* MJRefreshAutoGifFooter.m in Sources */,
+				2D9DF4751F7CE2F90042D6DD /* MJRefreshAutoNormalFooter.m in Sources */,
+				2D9DF4761F7CE2F90042D6DD /* MJRefreshAutoStateFooter.m in Sources */,
+				2D9DF4771F7CE2F90042D6DD /* MJRefreshBackGifFooter.m in Sources */,
+				2D9DF4781F7CE2F90042D6DD /* MJRefreshBackNormalFooter.m in Sources */,
+				2D9DF4791F7CE2F90042D6DD /* MJRefreshBackStateFooter.m in Sources */,
+				2D9DF47A1F7CE2F90042D6DD /* MJRefreshGifHeader.m in Sources */,
+				2D9DF47B1F7CE2F90042D6DD /* MJRefreshNormalHeader.m in Sources */,
+				2D9DF47C1F7CE2F90042D6DD /* MJRefreshStateHeader.m in Sources */,
+				2D9DF47D1F7CE2F90042D6DD /* MJRefreshConst.m in Sources */,
+				2D9DF47E1F7CE2F90042D6DD /* UIScrollView+MJExtension.m in Sources */,
+				2D9DF47F1F7CE2F90042D6DD /* UIScrollView+MJRefresh.m in Sources */,
+				2D9DF4801F7CE2F90042D6DD /* UIView+MJExtension.m in Sources */,
+				2D9DF4811F7CE2F90042D6DD /* NSBundle+MJRefresh.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
 		2DA7F9211AA6B4C4005627AB /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
@@ -594,6 +754,87 @@
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */
+		2D9DF4581F7CE29B0042D6DD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				DEFINES_MODULE = YES;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				DYLIB_INSTALL_NAME_BASE = "@rpath";
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_NO_COMMON_BLOCKS = YES;
+				INFOPLIST_FILE = MJRefreshFramework/Info.plist;
+				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = com.520it.MJRefreshFramework;
+				PRODUCT_MODULE_NAME = MJRefresh;
+				PRODUCT_NAME = MJRefresh;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VERSIONING_SYSTEM = "apple-generic";
+				VERSION_INFO_PREFIX = "";
+			};
+			name = Debug;
+		};
+		2D9DF4591F7CE29B0042D6DD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				CODE_SIGN_STYLE = Automatic;
+				COPY_PHASE_STRIP = NO;
+				CURRENT_PROJECT_VERSION = 1;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DEFINES_MODULE = YES;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				DYLIB_INSTALL_NAME_BASE = "@rpath";
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_NO_COMMON_BLOCKS = YES;
+				INFOPLIST_FILE = MJRefreshFramework/Info.plist;
+				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = com.520it.MJRefreshFramework;
+				PRODUCT_MODULE_NAME = MJRefresh;
+				PRODUCT_NAME = MJRefresh;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VERSIONING_SYSTEM = "apple-generic";
+				VERSION_INFO_PREFIX = "";
+			};
+			name = Release;
+		};
 		2DA7F9461AA6B4C4005627AB /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
@@ -740,6 +981,15 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
+		2D9DF4571F7CE29B0042D6DD /* Build configuration list for PBXNativeTarget "MJRefreshFramework" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				2D9DF4581F7CE29B0042D6DD /* Debug */,
+				2D9DF4591F7CE29B0042D6DD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
 		2DA7F9201AA6B4C4005627AB /* Build configuration list for PBXProject "MJRefreshExample" */ = {
 			isa = XCConfigurationList;
 			buildConfigurations = (

+ 82 - 0
MJRefreshExample.xcodeproj/xcshareddata/xcschemes/MJRefreshFramework.xcscheme

@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0900"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "2D9DF4511F7CE29B0042D6DD"
+               BuildableName = "MJRefreshFramework.framework"
+               BlueprintName = "MJRefreshFramework"
+               ReferencedContainer = "container:MJRefreshExample.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      language = ""
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      language = ""
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "2D9DF4511F7CE29B0042D6DD"
+            BuildableName = "MJRefreshFramework.framework"
+            BlueprintName = "MJRefreshFramework"
+            ReferencedContainer = "container:MJRefreshExample.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "2D9DF4511F7CE29B0042D6DD"
+            BuildableName = "MJRefreshFramework.framework"
+            BlueprintName = "MJRefreshFramework"
+            ReferencedContainer = "container:MJRefreshExample.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 24 - 0
MJRefreshFramework/Info.plist

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>$(DEVELOPMENT_LANGUAGE)</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>FMWK</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleVersion</key>
+	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<key>NSPrincipalClass</key>
+	<string></string>
+</dict>
+</plist>

+ 19 - 0
MJRefreshFramework/MJRefreshFramework.h

@@ -0,0 +1,19 @@
+//
+//  MJRefreshFramework.h
+//  MJRefreshFramework
+//
+//  Created by MJ Lee on 2017/9/28.
+//  Copyright © 2017年 小码哥. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+//! Project version number for MJRefreshFramework.
+FOUNDATION_EXPORT double MJRefreshFrameworkVersionNumber;
+
+//! Project version string for MJRefreshFramework.
+FOUNDATION_EXPORT const unsigned char MJRefreshFrameworkVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <MJRefreshFramework/PublicHeader.h>
+
+

+ 44 - 44
README.md

@@ -4,10 +4,10 @@
 
 ## Contents
 * Getting Started
-    * [Features【Support what kinds of controls to refresh】](#Support what kinds of controls to refresh)
-    * [Installation【How to use MJRefresh】](#How to use MJRefresh)
-    * [Who's using【More than hundreds of Apps are using MJRefresh】](#>More than hundreds of Apps are using MJRefresh)
-    * [Classes【The Class Structure Chart of MJRefresh】](#The Class Structure Chart of MJRefresh)
+    * [Features【Support what kinds of controls to refresh】](#Support_what_kinds_of_controls_to_refresh)
+    * [Installation【How to use MJRefresh】](#How_to_use_MJRefresh)
+    * [Who's using【More than hundreds of Apps are using MJRefresh】](#More_than_hundreds_of_Apps_are_using_MJRefresh)
+    * [Classes【The Class Structure Chart of MJRefresh】](#The_Class_Structure_Chart_of_MJRefresh)
 * Comment API
 	* [MJRefreshComponent.h](#MJRefreshComponent.h)
 	* [MJRefreshHeader.h](#MJRefreshHeader.h)
@@ -15,30 +15,30 @@
 	* [MJRefreshAutoFooter.h](#MJRefreshAutoFooter.h)
 * Examples
     * [Reference](#Reference)
-    * [The drop-down refresh 01-Default](#The drop-down refresh 01-Default)
-    * [The drop-down refresh 02-Animation image](#The drop-down refresh 02-Animation image)
-    * [The drop-down refresh 03-Hide the time](#The drop-down refresh 03-Hide the time)
-    * [The drop-down refresh 04-Hide status and time](#The drop-down refresh 04-Hide status and time)
-    * [The drop-down refresh 05-DIY title](#The drop-down refresh 05-DIY title)
-    * [The drop-down refresh 06-DIY the control of refresh](#The drop-down refresh 06-DIY the control of refresh)
-    * [The pull to refresh 01-Default](#The pull to refresh 01-Default)
-    * [The pull to refresh 02-Animation image](#The pull to refresh 02-Animation image)
-    * [The pull to refresh 03-Hide the title of refresh status](#The pull to refresh 03-Hide the title of refresh status)
-    * [The pull to refresh 04-All loaded](#The pull to refresh 04-All loaded)
-    * [The pull to refresh 05-DIY title](#The pull to refresh 05-DIY title)
-    * [The pull to refresh 06-Hidden After loaded](#The pull to refresh 06-Hidden After loaded)
-    * [The pull to refresh 07-Automatic back of the pull01](#上The pull to refresh 07-Automatic back of the pull01)
-    * [The pull to refresh 08-Automatic back of the pull02](#The pull to refresh 08-Automatic back of the pull02)
-    * [The pull to refresh 09-DIY the control of refresh(Automatic refresh)](#The pull to refresh 09-DIY the control of refresh(Automatic refresh))
-    * [The pull to refresh 10-DIY the control of refresh(Automatic back)](#The pull to refresh 10-DIY the control of refresh(Automatic back))
-    * [UICollectionView01-The pull and drop-down refresh](#UICollectionView01-The pull and drop-down refresh)
-    * [UIWebView01-The drop-down refresh](#UIWebView01-The drop-down refresh)
+    * [The drop-down refresh 01-Default](#The_drop-down_refresh_01-Default)
+    * [The drop-down refresh 02-Animation image](#The_drop-down_refresh_02-Animation_image)
+    * [The drop-down refresh 03-Hide the time](#The_drop-down_refresh_03-Hide_the_time)
+    * [The drop-down refresh 04-Hide status and time](#The_drop-down_refresh_04-Hide_status_and_time)
+    * [The drop-down refresh 05-DIY title](#The_drop-down_refresh_05-DIY_title)
+    * [The drop-down refresh 06-DIY the control of refresh](#The_drop-down_refresh_06-DIY_the_control_of_refresh)
+    * [The pull to refresh 01-Default](#The_pull_to_refresh_01-Default)
+    * [The pull to refresh 02-Animation image](#The_pull_to_refresh_02-Animation_image)
+    * [The pull to refresh 03-Hide the title of refresh status](#The_pull_to_refresh_03-Hide_the_title_of_refresh_status)
+    * [The pull to refresh 04-All loaded](#The_pull_to_refresh_04-All_loaded)
+    * [The pull to refresh 05-DIY title](#The_pull_to_refresh_05-DIY_title)
+    * [The pull to refresh 06-Hidden After loaded](#The_pull_to_refresh_06-Hidden_After_loaded)
+    * [The pull to refresh 07-Automatic back of the pull01](#The_pull_to_refresh_07-Automatic_back_of_the_pull01)
+    * [The pull to refresh 08-Automatic back of the pull02](#The_pull_to_refresh_08-Automatic_back_of_the_pull02)
+    * [The pull to refresh 09-DIY the control of refresh(Automatic refresh)](#The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh))
+    * [The pull to refresh 10-DIY the control of refresh(Automatic back)](#The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back))
+    * [UICollectionView01-The pull and drop-down refresh](#UICollectionView01-The_pull_and_drop-down_refresh)
+    * [UIWebView01-The drop-down refresh](#UIWebView01-The_drop-down_refresh)
 * [Hope](#Hope)
 
-## <a id="Support what kinds of controls to refresh"></a>Support what kinds of controls to refresh
+## <a id="Support_what_kinds_of_controls_to_refresh"></a>Support what kinds of controls to refresh
 * `UIScrollView`、`UITableView`、`UICollectionView`、`UIWebView`
 
-## <a id="How to use MJRefresh"></a>How to use MJRefresh
+## <a id="How_to_use_MJRefresh"></a>How to use MJRefresh
 * Installation with CocoaPods:`pod 'MJRefresh'`
 * Manual import:
     * Drag All files in the `MJRefresh` folder to project
@@ -53,11 +53,11 @@ UIScrollView+MJRefresh.h    UIScrollView+MJRefresh.m
 UIView+MJExtension.h        UIView+MJExtension.m
 ```
 
-## <a id=">More than hundreds of Apps are using MJRefresh"></a>More than hundreds of Apps are using MJRefresh
+## <a id="More_than_hundreds_of_Apps_are_using_MJRefresh"></a>More than hundreds of Apps are using MJRefresh
 <img src="http://images0.cnblogs.com/blog2015/497279/201506/141212365041650.png" width="200" height="300">
 * More information of App can focus on:[M了个J-博客园](http://www.cnblogs.com/mjios/p/4409853.html)
 
-## <a id="The Class Structure Chart of MJRefresh"></a>The Class Structure Chart of MJRefresh
+## <a id="The_Class_Structure_Chart_of_MJRefresh"></a>The Class Structure Chart of MJRefresh
 ![](http://images0.cnblogs.com/blog2015/497279/201506/132232456139177.png)
 - `The class of red text` in the chart:You can use them directly
     - The drop-down refresh control types
@@ -150,7 +150,7 @@ UIView+MJExtension.h        UIView+MJExtension.m
 ```
 <img src="http://images0.cnblogs.com/blog2015/497279/201506/141345470048120.png" width="30%" height="30%">
 
-## <a id="The drop-down refresh 01-Default"></a>The drop-down refresh 01-Default
+## <a id="The_drop-down_refresh_01-Default"></a>The drop-down refresh 01-Default
 
 ```objc
 self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
@@ -165,7 +165,7 @@ self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self r
 ```
 ![(下拉刷新01-普通)](http://images0.cnblogs.com/blog2015/497279/201506/141204343486151.gif)
 
-## <a id="The drop-down refresh 02-Animation image"></a>The drop-down refresh 02-Animation image
+## <a id="The_drop-down_refresh_02-Animation_image"></a>The drop-down refresh 02-Animation image
 ```objc
 // Set the callback(一Once you enter the refresh status,then call the action of target,that is call [self loadNewData])
 MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
@@ -180,14 +180,14 @@ self.tableView.mj_header = header;
 ```
 ![(下拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141204402238389.gif)
 
-## <a id="The drop-down refresh 03-Hide the time"></a>The drop-down refresh 03-Hide the time
+## <a id="The_drop-down_refresh_03-Hide_the_time"></a>The drop-down refresh 03-Hide the time
 ```objc
 // Hide the time
 header.lastUpdatedTimeLabel.hidden = YES;
 ```
 ![(下拉刷新03-隐藏时间)](http://images0.cnblogs.com/blog2015/497279/201506/141204456132944.gif)
 
-## <a id="The drop-down refresh 04-Hide status and time"></a>The drop-down refresh 04-Hide status and time
+## <a id="The_drop-down_refresh_04-Hide_status_and_time"></a>The drop-down refresh 04-Hide status and time
 ```objc
 // Hide the time
 header.lastUpdatedTimeLabel.hidden = YES;
@@ -197,7 +197,7 @@ header.stateLabel.hidden = YES;
 ```
 ![(下拉刷新04-隐藏状态和时间0)](http://images0.cnblogs.com/blog2015/497279/201506/141204508639539.gif)
 
-## <a id="The drop-down refresh 05-DIY title"></a>The drop-down refresh 05-DIY title
+## <a id="The_drop-down_refresh_05-DIY_title"></a>The drop-down refresh 05-DIY title
 ```objc
 // Set title
 [header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
@@ -214,14 +214,14 @@ header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
 ```
 ![(下拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141204563633593.gif)
 
-## <a id="The drop-down refresh 06-DIY the control of refresh"></a>The drop-down refresh 06-DIY the control of refresh
+## <a id="The_drop-down_refresh_06-DIY_the_control_of_refresh"></a>The drop-down refresh 06-DIY the control of refresh
 ```objc
 self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
 // Implementation reference to MJDIYHeader.h和MJDIYHeader.m
 ```
 ![(下拉刷新06-自定义刷新控件)](http://images0.cnblogs.com/blog2015/497279/201506/141205019261159.gif)
 
-## <a id="The pull to refresh 01-Default"></a>The pull to refresh 01-Default
+## <a id="The_pull_to_refresh_01-Default"></a>The pull to refresh 01-Default
 ```objc
 self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
     //Call this Block When enter the refresh status automatically
@@ -232,7 +232,7 @@ self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget
 ```
 ![(上拉刷新01-默认)](http://images0.cnblogs.com/blog2015/497279/201506/141205090047696.gif)
 
-## <a id="The pull to refresh 02-Animation image"></a>The pull to refresh 02-Animation image
+## <a id="The_pull_to_refresh_02-Animation_image"></a>The pull to refresh 02-Animation image
 ```objc
 // Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadMoreData])
 MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
@@ -245,7 +245,7 @@ self.tableView.mj_footer = footer;
 ```
 ![(上拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141205141445793.gif)
 
-## <a id="The pull to refresh 03-Hide the title of refresh status"></a>The pull to refresh 03-Hide the title of refresh status
+## <a id="The_pull_to_refresh_03-Hide_the_title_of_refresh_status"></a>The pull to refresh 03-Hide the title of refresh status
 ```objc
 // Hide the title of refresh status
 footer.refreshingTitleHidden = YES;
@@ -253,14 +253,14 @@ footer.refreshingTitleHidden = YES;
 ```
 ![(上拉刷新03-隐藏刷新状态的文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205200985774.gif)
 
-## <a id="The pull to refresh 04-All loaded"></a>The pull to refresh 04-All loaded
+## <a id="The_pull_to_refresh_04-All_loaded"></a>The pull to refresh 04-All loaded
 ```objc
 //Become the status of NoMoreData
 [footer noticeNoMoreData];
 ```
 ![(上拉刷新04-全部加载完毕)](http://images0.cnblogs.com/blog2015/497279/201506/141205248634686.gif)
 
-## <a id="The pull to refresh 05-DIY title"></a>The pull to refresh 05-DIY title
+## <a id="The_pull_to_refresh_05-DIY_title"></a>The pull to refresh 05-DIY title
 ```objc
 // Set title
 [footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle];
@@ -275,20 +275,20 @@ footer.stateLabel.textColor = [UIColor blueColor];
 ```
 ![(上拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205295511153.gif)
 
-## <a id="The pull to refresh 06-Hidden After loaded"></a>The pull to refresh 06-Hidden After loaded
+## <a id="The_pull_to_refresh_06-Hidden_After_loaded"></a>The pull to refresh 06-Hidden After loaded
 ```objc
 //Hidden current control of the pull to refresh
 self.tableView.mj_footer.hidden = YES;
 ```
 ![(上拉刷新06-加载后隐藏)](http://images0.cnblogs.com/blog2015/497279/201506/141205343481821.gif)
 
-## <a id="The pull to refresh 07-Automatic back of the pull01"></a>The pull to refresh 07-Automatic back of the pull01
+## <a id="The_pull_to_refresh_07-Automatic_back_of_the_pull01"></a>The pull to refresh 07-Automatic back of the pull01
 ```objc
 self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
 ```
 ![(上拉刷新07-自动回弹的上拉01)](http://images0.cnblogs.com/blog2015/497279/201506/141205392239231.gif)
 
-## <a id="The pull to refresh 08-Automatic back of the pull02"></a>The pull to refresh 08-Automatic back of the pull02
+## <a id="The_pull_to_refresh_08-Automatic_back_of_the_pull02"></a>The pull to refresh 08-Automatic back of the pull02
 ```objc
 MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
 
@@ -304,21 +304,21 @@ self.tableView.mj_footer = footer;
 ```
 ![(上拉刷新07-自动回弹的上拉02)](http://images0.cnblogs.com/blog2015/497279/201506/141205441443628.gif)
 
-## <a id="The pull to refresh 09-DIY the control of refresh(Automatic refresh)"></a>The pull to refresh 09-DIY the control of refresh(Automatic refresh)
+## <a id="The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh)"></a>The pull to refresh 09-DIY the control of refresh(Automatic refresh)
 ```objc
 self.tableView.mj_footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
 // Implementation reference to MJDIYAutoFooter.h和MJDIYAutoFooter.m
 ```
 ![(上拉刷新09-自定义刷新控件(自动刷新))](http://images0.cnblogs.com/blog2015/497279/201506/141205500195866.gif)
 
-## <a id="The pull to refresh 10-DIY the control of refresh(Automatic back)"></a>The pull to refresh 10-DIY the control of refresh(Automatic back)
+## <a id="The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back)"></a>The pull to refresh 10-DIY the control of refresh(Automatic back)
 ```objc
 self.tableView.mj_footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
 // Implementation reference to MJDIYBackFooter.h和MJDIYBackFooter.m
 ```
 ![(上拉刷新10-自定义刷新控件(自动回弹))](http://images0.cnblogs.com/blog2015/497279/201506/141205560666819.gif)
 
-## <a id="UICollectionView01-The pull and drop-down refresh"></a>UICollectionView01-The pull and drop-down refresh
+## <a id="UICollectionView01-The_pull_and_drop-down_refresh"></a>UICollectionView01-The pull and drop-down refresh
 ```objc
 // The drop-down refresh
 self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
@@ -332,7 +332,7 @@ self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingB
 ```
 ![(UICollectionView01-上下拉刷新)](http://images0.cnblogs.com/blog2015/497279/201506/141206021603758.gif)
 
-## <a id="UIWebView01-The drop-down refresh"></a>UIWebView01-The drop-down refresh
+## <a id="UIWebView01-The_drop-down_refresh"></a>UIWebView01-The drop-down refresh
 ```objc
 //Add the control of The drop-down refresh
 self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{