【问题标题】:UIPopover without any arrowsUIPopover 没有任何箭头
【发布时间】:2011-03-24 23:19:13
【问题描述】:

是否可以呈现一个没有任何箭头指向某处的弹出框?

【问题讨论】:

  • 所以你想要一个模态视图控制器?
  • 你是在建议我使用-presentModalViewController:animated:吗?这与 UIPopover 截然不同。它不提供与 UIPopover 相同的外观和感觉,并且您受限于某些固定尺寸。

标签: uikit ipad uipopovercontroller


【解决方案1】:

是的,可以这样做:

 [self.popoverController presentPopoverFromBarButtonItem:anItem   
                                permittedArrowDirections:0
                                                animated:YES];

零代表没有方向。

【讨论】:

  • 它对我有用!!!谢谢..苹果会接受吗? ...顺便说一句,是否可以在弹出框内显示键盘,就像它在 ipad 密码上的样子? stackoverflow.com/questions/3636560/…
  • 将此参数设置为 0 会破坏弹出框的大小。
  • 尝试创建 UIPopoverBackground 类的子类并覆盖 arrowDirection getter 方法。在那个方法中返回 0.
  • 为了快速使用 UIPopoverArrowDirection.allZeros
  • 这不适用于 iOS 9。没有 allZeros 属性。 Xcode 确实将其自动更正为仅使用 ()。所以 UIPopoverArrowDirection() 适用于 iOS 9
【解决方案2】:

对于 iPhone 和 swift 2.0 试试这个

启动弹出框的代码

initiatePopover(){
    let popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("XYZController") as! XYZController
    let nav = UINavigationController(rootViewController: popoverContent)
    nav.modalPresentationStyle = UIModalPresentationStyle.Popover
    let popover = nav.popoverPresentationController
    popoverContent.preferredContentSize = CGSizeMake(250 ,200)
    popover!.delegate = self
    popover!.sourceView = self.view
    popover!.sourceRect = CGRectMake(200,200,0,0)
    popover!.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
    self.presentViewController(nav, animated: true, completion: nil)
}

并将其添加到您的 ViewController

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
    return UIModalPresentationStyle.None
}

【讨论】:

    【解决方案3】:

    Swift4

    popover.permittedArrowDirections = []              
    

    【讨论】:

      【解决方案4】:

      permittedArrowDirections 设置为 0。

      permittedArrowDirections:0
      

      代码 -

      [self.popoverController presentPopoverFromBarButtonItem:anItem   
                                      permittedArrowDirections:0
                                                      animated:YES];
      

      零表示“NoDirection”。

      【讨论】:

      • 您也可以通过取消选择所有箭头方向复选框在情节提要中执行此操作。
      【解决方案5】:

      Swift3,这段代码适合我

      popover.permittedArrowDirections = .init(rawValue: 0)
      

      【讨论】:

        【解决方案6】:

        对于 Swift 2.0iOS9,解决方案是:

        popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()
        

        【讨论】:

        • “UIPopoverController”类型的值没有成员“permittedArrowDirections”
        • @SpyZip 这行得通。也许你忘记了问号。
        【解决方案7】:

        在 Swift 中,您可以这样做:

        popoverPresentationController.permittedArrowDirections = []
        

        因为在另一个配置中你可以使用:

        popoverPresentationController.permittedArrowDirections = [.up, .down]
        

        【讨论】:

          【解决方案8】:

          试试这个,它对我有用。

          [self.popoverViewController presentPopoverFromRect:rect inView:self.view  permittedArrowDirections:0 animated:YES];
          

          【讨论】:

            【解决方案9】:

            在 swift 3 中,您可以为此构建一个 UIPopoverArrowDirection 扩展:

            extension UIPopoverArrowDirection {
                public static var noArrow: UIPopoverArrowDirection {
                    return UIPopoverArrowDirection(rawValue: 0)
                }
            }
            

            你可以这样做:

            popoverPresentationController!.permittedArrowDirections = .noArrow
            

            【讨论】:

              【解决方案10】:

              这对我来说很好。

              [popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
                                                  inView:self.view 
                                permittedArrowDirections:NULL 
                                                animated:YES];
              

              享受编码。

              【讨论】:

                【解决方案11】:

                对于 swift 开发人员而言

                popoverController.sourceView = self.view
                popoverController.sourceRect = self.view.bounds
                popoverController.backgroundColor = UIColor.brownColor()
                
                popoverController.permittedArrowDirections = UIPopoverArrowDirection.init(rawValue: 0)
                popoverController.sourceRect = CGRectMake(width/4, hieght/4, width/2, hieght/2);
                

                【讨论】:

                  【解决方案12】:

                  不,没有UIPopoverArrowDirectionNone 选项,并且UIPopoverArrowDirectionUnknown 会抛出异常,我认为如果您尝试使用它来呈现。

                  您可以调用presentModalViewController:animated:,而不是弹出式控制器,并将您正在呈现的控制器设置为具有UIModalPresentationFormSheetUIModalPresentationPageSheet 的模态呈现样式。这些是比弹出窗口更传统的弹出屏幕。

                  【讨论】:

                  • 不幸的是,presentModalViewController 仅限于某些特定的帧大小,而弹出框则不是,除非我遗漏了什么。它们也不提供与弹出框相同的外观。
                  • 没错。不幸的是,如果您的要求很严格,您可能不得不滚动自己的弹出窗口来获得您想要的。
                  【解决方案13】:

                  如果您不想显示箭头,请不要使用 Popover。将您的视图控制器呈现为 Modal 并改用 UIModalPresentationFormSheet。

                  例子:

                  UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MyStoryBoard" bundle:nil];
                  UIViewController* viewController = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
                  viewController.modalPresentationStyle = UIModalPresentationFormSheet;
                  [presenterViewController presentViewController: viewController animated:YES completion:^{
                  
                  }];
                  

                  【讨论】:

                    【解决方案14】:

                    试试这个

                    [popOverController presentPopoverFromRect:CGRectMake(0, 0, 30, 40) inView:popOverContentView permittedArrowDirections:0 animated:NO];
                    

                    【讨论】:

                      【解决方案15】:

                      我使用弹出框根据触摸坐标显示菜单。 在这种情况下,popover 使用 self.view 的最大高度

                      CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
                      [self.popover presentPopoverFromRect:popeverFrame
                                                    inView:self.view
                                  permittedArrowDirections:UIPopoverArrowDirectionAny
                                                  animated:YES];
                      

                      但是当我使用 0 方向时。弹出框矩形没有将其高度设置为最大值,只能通过适当的属性设置。

                      CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
                      [self.popover presentPopoverFromRect:popeverFrame
                                                    inView:self.view
                                  permittedArrowDirections:UIPopoverArrowDirectionAny
                                                  animated:YES];
                      

                      希望这会有所帮助:Help with UIPopOverController size

                      【讨论】:

                        【解决方案16】:

                        使弹出方向为无并使其出现在视图控制器的中心:

                        let PopSrnVar = popoverPresentationController
                        let ConRctVar = view.frame
                        PopSrnVar!.sourceRect = CGRectMake(ConRctVar.width/4, ConRctVar.height/4, ConRctVar.width/2, ConRctVar.height/2)
                        // To make arrows as none
                        PopSrnVar!.permittedArrowDirections = UIPopoverArrowDirection()
                        

                        【讨论】:

                          【解决方案17】:

                          SWIFT 中的简单解决方案:

                          popover!.permittedArrowDirections = nil
                          

                          【讨论】:

                            猜你喜欢
                            • 2016-07-08
                            • 1970-01-01
                            • 1970-01-01
                            • 2019-06-25
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2016-07-06
                            • 1970-01-01
                            相关资源
                            最近更新 更多