UIPopover دون أي السهام
-
25-09-2019 - |
سؤال
هل من الممكن أن تقدم بوبوفير دون أي نوع من السهام لافتا إلى مكان ما ؟
المحلول
نعم ، من الممكن فقط القيام:
[self.popoverController presentPopoverFromBarButtonItem:anItem
permittedArrowDirections:0
animated:YES];
الصفر لا يمثل أي اتجاه.
نصائح أخرى
لجهاز iPhone و Swift 2.0 جرب هذا
رمز لبدء Popover
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
}
تعيين permittedArrowDirections
إلى 0.
permittedArrowDirections:0
شفرة -
[self.popoverController presentPopoverFromBarButtonItem:anItem
permittedArrowDirections:0
animated:YES];
صفر يخبر "Nodirection".
سويفت 3, ، هذا الرمز يعمل بالنسبة لي
popover.permittedArrowDirections = .init(rawValue: 0)
ل Swift 2.0
و iOS9
الحل هو:
popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()
جرب هذا ، إنه يعمل بالنسبة لي.
[self.popoverViewController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:0 animated:YES];
سويفت 4:
popover.permittedArrowDirections = []
هذا يفي بالغرض بالنسبة لي.
[popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
inView:self.view
permittedArrowDirections:NULL
animated:YES];
استمتع بالترميز.
كلا ، لا يوجد UIPopoverArrowDirectionNone
الخيار ، و UIPopoverArrowDirectionUnknown
يلقي استثناء أعتقد أنه إذا حاولت استخدام ذلك لتقديمه.
بدلاً من وحدة تحكم Popover ، يمكنك الاتصال presentModalViewController:animated:
وتعيين وحدة التحكم التي تقدمها للحصول على نمط عرض مشروط من UIModalPresentationFormSheet
او ربما UIModalPresentationPageSheet
. هذه شاشات منبثقة أكثر تقليدية من البوبوف.
في حالتي للمطورين السريع
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);
في Swift 3 ، يمكنك بناء ملف UIPopoverArrowDirection
امتداد لهذا:
extension UIPopoverArrowDirection {
public static var noArrow: UIPopoverArrowDirection {
return UIPopoverArrowDirection(rawValue: 0)
}
}
ويمكنك القيام به:
popoverPresentationController!.permittedArrowDirections = .noArrow
في سويفت ، يمكنك ببساطة القيام:
popoverPresentationController.permittedArrowDirections = []
لأنه في تكوين آخر يمكن أن تستخدمه:
popoverPresentationController.permittedArrowDirections = [.up, .down]
جرب هذه
[popOverController presentPopoverFromRect:CGRectMake(0, 0, 30, 40) inView:popOverContentView permittedArrowDirections:0 animated:NO];
لا تستخدم popovers إذا كنت لا ترغب في إظهار الأسهم. قدم وحدة تحكم العرض الخاصة بك كسيطر واستخدم ورقة uimodalpresentationformsheet بدلاً من ذلك.
مثال:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MyStoryBoard" bundle:nil];
UIViewController* viewController = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
viewController.modalPresentationStyle = UIModalPresentationFormSheet;
[presenterViewController presentViewController: viewController animated:YES completion:^{
}];
يمكنني استخدام Popover لإظهار القائمة اعتمادًا على تنسيق اللمس. في هذه الحالة ، يستخدم Popover أقصى ارتفاع للذات
CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
ولكن عندما أستخدم توجيه 0. لا يحدد Popover Rectangle ارتفاعه إلى أقصى حد ولا يمكن تعيينه إلا عن طريق الخاصية المناسبة.
CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
أتمنى أن يساعد هذا: مساعدة في حجم Uipopovercontroller
لجعل البوب أكثر من اتجاه لا وجعلها تظهر في مركز تحكم عرض :
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()
حل بسيط في سويفت:
popover!.permittedArrowDirections = nil