Last active
June 27, 2016 18:20
-
-
Save steipete/4d5b08c1286d7c0b3688 to your computer and use it in GitHub Desktop.
If you're annoyed about the incorrect arrow presentation on popovers (https://twitter.com/steipete/status/624521051855319040) use this category. Oh, and file a radar! I did.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@implementation UIPopoverPresentationController (PSPDFAdditions) | |
+ (void)load { | |
PSPDFSwizzleMethodImplementation(self, @selector(containerViewWillLayoutSubviews), ^(UIPopoverPresentationController *_self) { | |
// Refresh bar button view internals | |
[_self pspdf_updateBarButtonView]; | |
((void( *)(id, SEL))objc_msgSend)(_self, PSPDFPrefixedSelector(containerViewWillLayoutSubviews)); | |
}); | |
} | |
// UIPopover positioning from barButtonItems is broken, fix it. | |
- (void)setPspdf_barButtonItem:(UIBarButtonItem *)barButtonItem { | |
objc_setAssociatedObject(self, @selector(pspdf_barButtonItem), barButtonItem, OBJC_ASSOCIATION_RETAIN_NONATOMIC); | |
[self pspdf_updateBarButtonView]; | |
} | |
- (void)pspdf_updateBarButtonView { | |
UIBarButtonItem *barButtomItem = self.pspdf_barButtonItem; | |
if (!barButtomItem) return; | |
UIView *itemView = barButtomItem.pspdf_view; | |
if ([itemView isKindOfClass:UIView.class]) { | |
CGRect itemRect = itemView.frame; | |
CGRect navBarRect = itemView.superview.frame; | |
if (navBarRect.origin.y < 100.f) { | |
itemRect.origin.y -= 5.f; | |
} | |
itemRect.origin.x -= 1.f; | |
self.sourceView = itemView.superview; | |
self.sourceRect = itemRect; | |
} else { | |
self.barButtonItem = barButtomItem; | |
} | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Oh, you'll need to replace the swizzling above with whatever helper you have - there are many ways to fix. If you don't update the toolbar on rotation, you can skip the swizzling completely. Ah, and use your own prefix, or you'll clash with PSPDFKit (if you ever need to display/edit PDFs on iOS or Android...) :)