我有一个tableView,我希望它的contentInsets始终为零。所以我添加代码:
class_replaceMethod([UITableView class], @selector(setContentInset:), (IMP)setContentInsetZero, "@");
然后我对setContentInsetsZero
函数进行编码:
void setContentInsetZero(id SELF, SEL _cmd, UIEdgeInsets insets) {
Ivar tableViewInsets = class_getInstanceVariable([UITableView class], "_contentInset");
object_setIvar(SELF, tableViewInsets, [NSValue valueWithUIEdgeInsets:UIEdgeInsetsZero]);
}
当程序运行时,它调用了setContentInsetZero
函数,但它不起作用?有人能告诉我为什么吗?
您可以通过进一步使用swizzling方法来完成您想要做的事情。把你的新方法当作包装器而不是替换,它可以拦截参数并调用原始方法。
请查看此链接,了解完成所需操作的确切方法:http://nshipster.com/method-swizzling/
这将影响应用程序中的所有UITableView,更好的解决方案可能是将UITableView子类化并重写该方法(使用超级调用传递替换的参数)。然后你可以在需要的地方使用它。