web-dev-qa-db-ja.com

矢印なしのUIPopover

どこかを指す矢印のないポップオーバーを提示することは可能ですか?

51
David Liu

はい、それだけで可能です:

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

ゼロは方向を表しません。

99
Matt

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
}
22
Sachin Agarwal

permittedArrowDirectionsを0に設定します。

permittedArrowDirections:0

コード-

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

ゼロは「NoDirection」を示します。

9
Akshay

Swift、このコードは私のために働く

popover.permittedArrowDirections = .init(rawValue: 0)
7
Khuong

にとって - Swift 2.0およびiOS9解決策は次のとおりです。

popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()
5
Nuno Vieira

Swift4

popover.permittedArrowDirections = []              
4

これを試してください、それは私のために動作します。

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

これは私には問題ありません。

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

コーディングをお楽しみください。

3
Shivaay

いいえ、UIPopoverArrowDirectionNoneオプションはありません。UIPopoverArrowDirectionUnknownは例外をスローします。これを使用して表示しようとすると考えられます。

ポップオーバーコントローラーの代わりに、presentModalViewController:animated:そして、提示するコントローラーをUIModalPresentationFormSheetまたはおそらくUIModalPresentationPageSheetのモーダルプレゼンテーションスタイルに設定します。これらは、ポップオーバーよりも伝統的なポップアップ画面です。

2
Kevlar

Swiftでは、次のことが簡単にできます。

popoverPresentationController.permittedArrowDirections = []

別の構成では次を使用できた可能性があるため、

popoverPresentationController.permittedArrowDirections = [.up, .down]
2
Tomn

私の場合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);
2
dev_shanghai

Swift 3)では、このためにUIPopoverArrowDirection拡張を構築できます。

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

あなたができること:

popoverPresentationController!.permittedArrowDirections = .noArrow
2
manueGE

矢印を表示したくない場合は、ポップオーバーを使用しないでください。 View Controllerをモーダルとして提示し、代わりにUIModalPresentationFormSheetを使用します。

例:

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

}];
1
fedtuck

これを試して

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

タッチ座標に応じてポップオーバーを使用してメニューを表示します。この場合、ポップオーバーは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];

これが役立つことを願っています: IPopOverControllerサイズのヘルプ

1
GxocT

方向なしにポップを作成し、View Controllerの中央に表示するには:

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()
0
Sujay U N