美文网首页
contentInsetAdjustmentBehavior设置

contentInsetAdjustmentBehavior设置

作者: 炒鸡范 | 来源:发表于2017-09-20 12:06 被阅读370次

对于很多关于ios11适配中我都看到一段代码:

#define  adjustsContentInsets(scrollView)\
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
if ([UIScrollView instancesRespondToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")]) {\
[scrollView   performSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:") withObject:@(2)];\
}\
_Pragma("clang diagnostic pop") \
} while (0)

对于下面的这段代码能否生效表示怀疑。

performSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:") withObject:@(2)]

因此做个简单的测试如下:


4.png

其中默认不带开测试1和测试2的结果如下:

1.png

为了显示scrollview的具体content的位置我对界面稍微往下拖动了大概1个像素,用来显示右边的滚动指示器。

打开测试1代码的结果如下:


2.png

打开测试2代码的结果如下:


3.png

如果

performSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:") withObject:@(2)]

这段代码能够生效,测试1和测试2的结果应当是一样的吧?

这边修改了一下上面的代码,就能正常使用了。

#define  adjustsScrollViewInsets_NO(scrollView,vc)\
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
if ([UIScrollView instancesRespondToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")]) {\
NSMethodSignature *signature = [UIScrollView instanceMethodSignatureForSelector:@selector(setContentInsetAdjustmentBehavior:)];\
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];\
NSInteger argument = 2;\
invocation.target = scrollView;\
invocation.selector = @selector(setContentInsetAdjustmentBehavior:);\
[invocation setArgument:&argument atIndex:2];\
 [invocation invoke];\
} else {\
vc.automaticallyAdjustsScrollViewInsets = NO;\
}\
_Pragma("clang diagnostic pop") \
} while (0)

相关文章

网友评论

      本文标题:contentInsetAdjustmentBehavior设置

      本文链接:https://www.haomeiwen.com/subject/pdznsxtx.html