दिलचस्प पोस्ट
जावा में सूची के लिए मानचित्र को कैसे रूपांतरित करना है? आईएसओ 8601 प्रारूप से एक .NET डेटटाइम कैसे बनाएं जावास्क्रिप्ट में सीएसएस प्रॉपर्टी सेट करें? पेपैल पहुंच – SSL प्रमाणपत्र: स्थानीय जारीकर्ता प्रमाणपत्र प्राप्त करने में असमर्थ स्काला के केस वर्ग और कक्षा में क्या अंतर है? PHP घातक त्रुटि: अपरिभाषित फ़ंक्शन को कॉल करें mssql_connect () jQuery: एक तालिका में पंक्तियों की गिनती संख्या जावास्क्रिप्ट में फ़्लोट परिशुद्धता के साथ काम करना UIWebView में प्रमाणीकरण चुनौती कैसे प्रदर्शित करें? टिनकेटर का उपयोग करने वाला टाइमर कैसे बनाएं? एक अंतराल पर अंगुल्य 2 HTTP पायथन अनुरोध SSLError फेंकने एक 64-बिट सिस्टम (जीएनयू टूलचैन) पर 32-बिट बायनेरिज़ को इकट्ठा करना कांस्य 2/4 सेवाओं और घटकों में पाइप का उपयोग करें स्ट्रिंग हैं। एक्लस () और == ऑपरेटर वास्तव में एक ही है?

एम्बेडेड नेविगेशन नियंत्रक के साथ पॉपवर वापस एनएवी पर आकार का सम्मान नहीं करता है

मेरे पास UIPopoverController है जो एक UINavigationController की मेजबानी करता है, जिसमें दृश्य नियंत्रकों का एक छोटा पदानुक्रम होता है।

मैंने दस्तावेज़ों का पालन किया और प्रत्येक दृश्य नियंत्रक के लिए, मैं इस दृश्य के पॉपोवर-संदर्भ आकार को इस तरह सेट करता हूं:

[self setContentSizeForViewInPopover:CGSizeMake(320, 500)]; 

(प्रत्येक नियंत्रक के लिए अलग आकार)

यह काम करता है जैसे मैं पदानुक्रम में आगे बढ़ता हूं- पॉपओवर स्वचालित रूप से धक्का दिया नियंत्रक के अनुरूप आकार परिवर्तनों को एनिमेट करता है।

हालांकि, जब मैं नेविगेशन बार के बैक बटन के माध्यम से "स्टॉप" के माध्यम से "बैक" को नेविगेट करता हूं, पॉपओवर का आकार बदलता नहीं है – यह सबसे बड़ा गहराई तक पहुंच के रूप में रहता है। यह मुझे टूटा लगता है; मुझे आशा थी कि पॉपओवर उन आकारों का सम्मान करना चाहेंगे जो इसे सेट स्टैक के माध्यम से चले गए हैं।

क्या मैं कुछ भूल रहा हूँ?

धन्यवाद।

वेब के समाधान से एकत्रित समाधान "एम्बेडेड नेविगेशन नियंत्रक के साथ पॉपवर वापस एनएवी पर आकार का सम्मान नहीं करता है"

ठीक है, मैं एक ही मुद्दे के साथ संघर्ष कर रहा था। उपरोक्त समाधानों में से कोई भी मेरे लिए बहुत अच्छी तरह से काम करता है, इसलिए मैंने थोड़ा जांच करने का निर्णय लिया और पता चला कि यह कैसे काम करता है। यह वही है जो मुझे पता चला है: – जब आप अपने दृश्य नियंत्रक में contentSizeForViewInPopover सेट करते हैं तो इसे पॉपओवर खुद से बदला नहीं जाएगा – भले ही अलग नियंत्रक के लिए नेविगेट करते समय पॉपोवर का आकार बदल सकता है। – जब अलग नियंत्रक के लिए नेविगेट करते समय पॉपओवर का आकार बदल जाएगा, पॉपुवर का आकार बहाल नहीं होता है – दृश्य में पॉपओवर का आकार बदल रहा है। विलएपियर बहुत ही अजीब एनीमेशन देता है (जब हम कहते हैं कि आप पॉपकंट्रोलर के अंदर पॉपकंट्रोलर कहते हैं) – मैं इसे सुझा नहीं था – मेरे लिए कंट्रोलर के अंदर हार्डकोड आकार सेट करना बिल्कुल भी काम नहीं करेगा – मेरे नियंत्रकों को कभी-कभी बड़े आकार के छोटे-छोटे नियंत्रक होते हैं, जो उन्हें पेश करेंगे, हालांकि आकार के बारे में विचार है

सभी दर्द के लिए एक समाधान इस प्रकार है: आपको currentSetSizeForPopover आकार के आकार को currentSetSizeForPopover । लेकिन आपको सावधान रहना होगा, जब आप उसी आकार को सेट करेंगे, जो कि पहले से ही currentSetSizeForPopover क्षेत्र में सेट किया गया था। currentSetSizeForPopover तो currentSetSizeForPopover आकार बदल नहीं जाएगा। ऐसा होने के लिए, आप सबसे पहले नकली आकार सेट कर सकते हैं (जो कि पहले सेट किए गए एक से अलग होगा) और उसके बाद उचित आकार सेट करना होगा। यह समाधान आपके नियंत्रक नेविगेशन नियंत्रक के अंदर नेस्ट किया जाता है, भले ही काम करेगा और पॉपओवर तदनुसार उसका आकार बदल जाएगा जब आप नियंत्रकों के बीच वापस नेविगेट करेंगे।

आप निम्न सहायक विधि के साथ UIViewController पर आसानी से श्रेणी बना सकते हैं जो कि आकार को सेट करने के साथ चाल करना होगा:

 - (void) forcePopoverSize { CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover; CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f); self.contentSizeForViewInPopover = fakeMomentarySize; self.contentSizeForViewInPopover = currentSetSizeForPopover; } 

उसके बाद बस इसे वांछित नियंत्रक के -viewDidAppear में -viewDidAppear

यहां बताया गया है कि आईओएस 7 और 8 के लिए मैंने इसे कैसे सुलझाया है:

आईओएस 8 में, आईओएस चुपचाप पॉप्यूवर में दिखने वाला दृश्य लपेट कर रहा है जिसमें प्रस्तुत विजिटंट्रोलर व्यू नियंत्रक के प्रस्तुत वियंट कंट्रोलर का उपयोग किया जाता है। एक 2014 डब्ल्यूडब्ल्यूडीसी विडियो है जिसमें स्पोइओवर नियंत्रक के साथ नया क्या है, जहां वे इस पर स्पर्श करते हैं।

वैसे भी, नेविगेशन नियंत्रक स्टैक पर दिखाए गए नियंत्रकों के लिए जो सभी अपना स्वयं का आकार चाहते हैं, इन दृश्य नियंत्रकों की आवश्यकता (आईओएस 8 के अंतर्गत) को डायनामिक रूप से पसंदीदा कंटेंट साइज़ सेट करने के लिए इस कोड को कॉल करने की आवश्यकता है:

 self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable); 

अपनी गणना की गई तालिका या ऊंचाई देखने के साथ ऊँचाई बदलें।

बहुत सारे डुप्लिकेट कोड से बचने के लिए और आम आईओएस 7 और आईओएस 8 समाधान बनाने के लिए, मैं यूआईटीबल वीआईयूआई कंट्रोलर पर एक वर्जन बनाया है जब यह देखने के लिए कि मेरे डिज़ाइन में डिडएपपर को बुलाया जाता है:

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self setPopOverViewContentSize]; } 

Category.h:

 #import <UIKit/UIKit.h> @interface UITableViewController (PreferredContentSize) - (void) setPopOverViewContentSize; @end 

Category.m:

 #import "Category.h" @implementation UITableViewController (PreferredContentSize) - (void) setPopOverViewContentSize { [self.tableView layoutIfNeeded]; int heightOfTable = [self.tableView contentSize].height; if (heightOfTable > 600) heightOfTable = 600; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0) self.preferredContentSize=CGSizeMake(320, heightOfTable); else self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable); } } @end 

यह क्रैशिक के जवाब पर एक सुधार है।
आपका समाधान महान है, लेकिन यह आसानी से एनिमेटेड नहीं है।
थोड़ा सा सुधार अच्छा एनीमेशन देता है:

- (void) forcePopoverSize में अंतिम पंक्ति - (void) forcePopoverSize विधि:

 - (void) forcePopoverSize { CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover; CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f); self.contentSizeForViewInPopover = fakeMomentarySize; } 

[स्व-फोर्सपॉवरपर साइज़] को रखें- - (void)viewWillAppear:(BOOL)animated दृश्यविलएपीपर - (void)viewWillAppear:(BOOL)animated विधि:

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self forcePopoverSize]; } 

और अंत में – वांछित आकार सेट करें - (void)viewDidAppear:(BOOL)animated विधि:

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover; self.contentSizeForViewInPopover = currentSetSizeForPopover; } 

आपको viewWillAppear आकार को फिर से सेट करने की ज़रूरत है viewWillAppear आप जिस तरह से पॉपुएवर नियंत्रक का आकार निर्धारित करते हैं, उसे कॉल करके मेरे पास एक ही मुद्दा था लेकिन जब मैंने इसे जोड़ दिया तो समस्या हल हो गई।

एक और बात: यदि आप बीटा संस्करण 5 से कम का उपयोग कर रहे हैं। तब पॉपओवर प्रबंधन करने में अधिक मुश्किल है। वे बीटा संस्करण 5 से अधिक अनुकूल महसूस करते हैं। यह अच्छा है कि अंतिम संस्करण बाहर है। 😉

उम्मीद है की यह मदद करेगा।

में -(void)viewDidLoad नियंत्रक में उपयोग कर रहे सभी दृश्य नियंत्रकों के -(void)viewDidLoad , जोड़ें:

 [self setContentSizeForViewInPopover:CGSizeMake(320, 500)]; 

मैं दृश्य में आकार को रीसेट करता हैवहीआआकार: (BOOL) दृश्य नियंत्रक की एनिमेटेड विधि जिसे वापस से नेविगेट किया जा रहा है:

 -(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; CGSize contentSize = [self contentSizeForViewInPopover]; contentSize.height = 0.0; self.contentSizeForViewInPopover = contentSize; } 

तब जब दृश्य को वापस दिलाई जाती है, तो मैं आकार को ठीक से रीसेट करता हूं:

 -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; CGSize contentSize; contentSize.width = self.contentSizeForViewInPopover.width; contentSize.height = [[self.fetchedResultsController fetchedObjects] count] * self.tableView.rowHeight; self.contentSizeForViewInPopover = contentSize; } 

आईओएस 8 के लिए निम्न कार्य करता है:

 - (void) forcePopoverSize { CGSize currentSetSizeForPopover = self.preferredContentSize; CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f); self.preferredContentSize = fakeMomentarySize; self.navigationController.preferredContentSize = fakeMomentarySize; self.preferredContentSize = currentSetSizeForPopover; self.navigationController.preferredContentSize = currentSetSizeForPopover; } 

BTW मुझे लगता है, यह पिछले आईओएस संस्करणों के साथ संगत होना चाहिए …

 Well i worked out. Have a look. Made a ViewController in StoryBoard. Associated with PopOverViewController class. import UIKit class PopOverViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.preferredContentSize = CGSizeMake(200, 200) self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: "dismiss:") } func dismiss(sender: AnyObject) { self.dismissViewControllerAnimated(true, completion: nil) } } See ViewController: // // ViewController.swift // iOS8-PopOver // // Created by Alvin George on 13.08.15. // Copyright (c) 2015 Fingent Technologies. All rights reserved. // import UIKit class ViewController: UIViewController, UIPopoverPresentationControllerDelegate { func showPopover(base: UIView) { if let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("popover") as? PopOverViewController { let navController = UINavigationController(rootViewController: viewController) navController.modalPresentationStyle = .Popover if let pctrl = navController.popoverPresentationController { pctrl.delegate = self pctrl.sourceView = base pctrl.sourceRect = base.bounds self.presentViewController(navController, animated: true, completion: nil) } } } override func viewDidLoad(){ super.viewDidLoad() } @IBAction func onShow(sender: UIButton) { self.showPopover(sender) } func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { return .None } } Note: The func showPopover(base: UIView) method should be placed before ViewDidLoad. Hope it helps ! 

मेरे लिए यह समाधान काम करता है यह मेरे व्यू नियंत्रक से एक विधि है जो UITableViewController विस्तार करता है और यूआईनाविगेशन नियंत्रक के लिए रूट नियंत्रक है।

 -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; self.contentSizeForViewInPopover = self.tableView.bounds.size; } 

और दृश्य नियंत्रक के लिए सामग्री आकार सेट करने के लिए मत भूलें, जिसे आप नेविगेशन स्टैक में पुश कर सकते हैं

 - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{ dc = [[DetailsController alloc] initWithBookmark:[[bookmarksArray objectAtIndex:indexPath.row] retain] bookmarkIsNew:NO]; dc.detailsDelegate = self; dc.contentSizeForViewInPopover = self.contentSizeForViewInPopover; [self.navigationController pushViewController:dc animated:YES]; } 

यदि आप एंबेबलर की कल्पना कर सकते हैं, तो मुझे लगता है कि यह थोड़ा बेहतर है:

 - (शून्य) बलपीपओवरसिसेज {
     CGSize वर्तमानSetSizeForPopover = self.contentSizeForViewInPopover;
     self.contentSizeForViewInPopover = सीजीएसइज़मेक (0, 0);
     self.contentSizeForViewInPopover = वर्तमानSetSizeForPopover;
 }

स्वीकार किए जाते हैं जवाब आईओएस 8 के साथ ठीक काम नहीं कर रहा है। मैंने उस पॉपोवर में उपयोग के लिए UINavigationController अपने उप-वर्ग का निर्माण किया था और इस तरह की preferredContentSize को ओवरराइड कर दिया था:

 - (CGSize)preferredContentSize { return [[self.viewControllers lastObject] preferredContentSize]; } 

इसके अलावा, कॉलिंग forcePopoverSize बजाय forcePopoverSize (विधि @ krasnyk द्वारा कार्यान्वित) viewDidAppear मैंने एक forcePopoverSize (जो पॉपोवर को दिखाता है) को पहले उल्लेखित नेविगेशन (पॉपओवर में) के लिए एक प्रतिनिधि के रूप में सेट करने का निर्णय लिया और इसमें (क्या बल विधि है):

 -(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 

एक पारित viewController लिए प्रतिनिधि प्रतिनिधि एक महत्वपूर्ण बात, forcePopoverSize एक UINavigationControllerDelegate विधि में forcePopoverSize ठीक है अगर आपको एनीमेशन को चिकना बनाने की ज़रूरत नहीं है, तो फिर इसे देखने में छोड़ viewDidAppear

मुझे एक ही समस्या का सामना करना पड़ रहा था, लेकिन आप सामग्रियों को देखने के लिए सेट नहीं करना चाहते हैं WillAppear या देखें WillDisappear विधि

 AirPrintController *airPrintController = [[AirPrintController alloc] initWithNibName:@"AirPrintController" bundle:nil]; airPrintController.view.frame = [self.view frame]; airPrintController.contentSizeForViewInPopover = self.contentSizeForViewInPopover; [self.navigationController pushViewController:airPrintController animated:YES]; [airPrintController release]; 

नेविगेशन नियंत्रक को उस नियंत्रक को धकेलने से पहले उस नियंत्रक के लिए कंटेंटसिसफोर वीआईईआईपॉपवर प्रॉपर्टी सेट करें

मैंने देखा है कि निम्नलिखित में डालकर भाग्य मिला है:

 [self.popoverController setPopoverContentSize:self.contentSizeForViewInPopover animated:NO]; 

यद्यपि यह मामले में अच्छी तरह चेतन नहीं हो सकता है जब आप विभिन्न आकार के पॉपओवर को धक्का / पॉपिंग कर रहे हैं। लेकिन मेरे मामले में, पूरी तरह से काम करता है!

आपको जो कुछ करना है वह है:

– पॉपओवर सामग्री दृश्य के दृश्यविकल्प विधि में, नीचे दी गई स्निपेट जोड़ें। आपको पॉपओवर के आकार को पहली बार निर्दिष्ट करना होगा, जब वह लोड होता है।

 CGSize size = CGSizeMake(width,height); self.contentSizeForViewInPopover = size; 

मुझे पॉपवर कंट्रोलर के पॉपअप कंटेंट साइज़ = CGSizeMake (320, 600) के शुरू में इस समस्या के साथ था, लेकिन अपने ContentViewController (एक UINavigationController) के माध्यम से नेविगेट करते समय अधिक हो जाएगा।

ए वी नियंत्रक केवल कस्टम UITableViewControllers को दबाए और पॉपिंग कर रहा था, इसलिए मेरे कस्टम तालिका दृश्य नियंत्रक वर्ग के दृश्य में डीडलोड मैं स्वयं को सेट कर रहा हूं। SontentSizeForViewInPopover = CGSizeMake (320, 556)

नेवी नियंत्रक के एनएवी बार के लिए 44 कम पिक्सेल खाते हैं, और अब मेरे पास अब कोई समस्या नहीं है।

यह सभी दृश्य नियंत्रकों में रखें जो आप पॉपवर के अंदर आगे बढ़ रहे हैं

 CGSize currentSetSizeForPopover = CGSizeMake(260, 390); CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f); self.contentSizeForViewInPopover = fakeMomentarySize; self.contentSizeForViewInPopover = currentSetSizeForPopover; 

उसी मुद्दे का सामना किया और इसे यूआईपीओपॉयर नियंत्रक के प्रवेश से पहले नियंत्रक को देखने और नियंत्रक को देखने के लिए सामग्री दृश्य आकार को सेट करके तय किया गया।

  CGSize size = CGSizeMake(320.0, _options.count * 44.0); [self setContentSizeForViewInPopover:size]; [self.view setFrame:CGRectMake(0.0, 0.0, size.width, size.height)]; [navi setContentSizeForViewInPopover:size]; _popoverController = [[UIPopoverController alloc] initWithContentViewController:navi]; 

मैं सिर्फ एक और समाधान की पेशकश करना चाहता हूं, क्योंकि इनमें से कोई भी मेरे लिए काम नहीं करता …

मैं वास्तव में इसे https://github.com/nicolaschengdev/WYPopoverController के साथ प्रयोग कर रहा हूँ

जब आप अपने पॉपअप को पहली बार कॉल करते हैं तो इसका उपयोग करें।

 if ([sortTVC respondsToSelector:@selector(setPreferredContentSize:)]) { sortTVC.preferredContentSize = CGSizeMake(popoverContentSortWidth, popoverContentSortHeight); } else { sortTVC.contentSizeForViewInPopover = CGSizeMake(popoverContentSortWidth, popoverContentSortHeight); } 

फिर उस पॉपअप में इसका उपयोग करें

 -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; if ([self respondsToSelector:@selector(setPreferredContentSize:)]) { self.preferredContentSize = CGSizeMake(popoverContentMainWidth, popoverContentMainheight); } else { self.contentSizeForViewInPopover = CGSizeMake(popoverContentMainWidth, popoverContentMainheight); } } -(void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:YES]; self.contentSizeForViewInPopover = CGSizeZero; } 

फिर बाल विचारों के लिए दोहराएं …

ऐसा करने के लिए IOS7 में यह सही तरीका है, नेविगेशन स्टैक में प्रत्येक दृश्य नियंत्रक में दृश्यडिडलोड में पसंदीदा सामग्री का आकार सेट करें (केवल एक बार किया)। तब दृश्य में WillAppear popover नियंत्रक के लिए एक संदर्भ प्राप्त करें और सामग्री को अपडेट करें वहाँ सिमित करें।

 -(void)viewDidLoad:(BOOL)animated { ... self.popoverSize = CGSizeMake(420, height); [self setPreferredContentSize:self.popoverSize]; } -(void)viewWillAppear:(BOOL)animated { ... UIPopoverController *popoverControllerReference = ***GET REFERENCE TO IT FROM SOMEWHERE***; [popoverControllerReference setPopoverContentSize:self.popoverSize]; } 

@ क्रोस्कीक समाधान पिछले आईओएस संस्करणों में अच्छी तरह से काम किया है लेकिन आईओएस 8 में काम नहीं कर रहा है। निम्न समाधान मेरे लिए काम किया

  - (void) forcePopoverSize { CGSize currentSetSizeForPopover = self.preferredContentSize; //Yes, there are coupling. We need to access the popovercontroller. In my case, the popover controller is a weak property in the app's rootVC. id mainVC = [MyAppDelegate appDelegate].myRootVC; if ([mainVC valueForKey:@"_myPopoverController"]) { UIPopoverController *popover = [mainVC valueForKey:@"_myPopoverController"]; [popover setPopoverContentSize:currentSetSizeForPopover animated:YES]; } } 

यह सबसे अच्छा समाधान नहीं है, लेकिन यह काम करता है।

नया UIPopoverPresentationController भी आकार परिवर्तन समस्या है :(।

आपको नेविगेशन viewWillAppear की preferredContentSize viewWillAppear संपत्ति को देखने के लिए सेट करना viewWillAppear :

 -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.preferredContentSize = CGSizeMake(320, 500);}