我正在尝试更改箭头方向,以便在出现时不会阻止我为应用程序设置的顶部栏。这是我用来改变方向的代码:
UIMenuController *menuController = [UIMenuController sharedMenuController];
[menuController setArrowDirection:UIMenuControllerArrowUp];
这就是结果,老实说,这是非常紧张的:
在我的iphone上似乎也是同样的问题。
有人可以看一下吗?感谢
答案 0 :(得分:5)
经过几天的研究,我终于找到了改变webview中菜单控制器箭头方向的方法。
首先,请在视图控制器的viewDidLoad
方法中执行此操作。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuControllerWillShow:) name:UIMenuControllerWillShowMenuNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuControllerWillHide:) name:UIMenuControllerWillHideMenuNotification object:nil];
然后,添加这两个函数,然后箭头方向将始终指向上方,在这种情况下,菜单栏将始终显示在文本下方。 (同样,如果您希望您的菜单栏出现在其他位置,您可以将UIMenuControllerArrowUp;
更改为任何其他方向。
-(void)menuControllerWillShow:(NSNotification *)notification{
//Remove Will Show Notification to prevent
// "menuControllerWillShow" function to be called multiple times
[[NSNotificationCenter defaultCenter]removeObserver:self name:UIMenuControllerWillShowMenuNotification object:nil];
//Hide the Original Menu View
UIMenuController* menuController = [UIMenuController sharedMenuController];
CGPoint origin = menuController.menuFrame.origin;
CGSize size = menuController.menuFrame.size;
CGRect menuFrame;
menuFrame.origin = origin;
menuFrame.size = size;
[menuController setMenuVisible:NO animated:NO];
//Modify its target rect and show it again to prevent glitchy appearance
menuController.arrowDirection = UIMenuControllerArrowUp;
[menuController setTargetRect:menuFrame inView:self.view];
[menuController setMenuVisible:YES animated:YES];
}
-(void)menuControllerWillHide:(NSNotification *)notification{
//re-register menuControllerWillShow
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuControllerWillShow:) name:UIMenuControllerWillShowMenuNotification object:nil];
}
答案 1 :(得分:0)
根据Apple Doc,arrowDirection设置箭头指向的方向;它与菜单相对于目标区域的位置无关。它看起来似乎没有让你对setTargetRect:inView之外的菜单定位有任何控制。
如果你真的想把菜单放在文本下方,你可以设置一个“假的”目标区域,并改变箭头方向指向感兴趣的“真实”区域。
然而,Apple可能就是这样做的原因。我猜?如果用手指选择一些文字,你的手可能会遮挡文本下方的屏幕部分...所以如果菜单出现在那里则不是很有帮助。通过标准UI约定来打破一致性并不值得付出努力。