2016-05-19 7 views
15

मुझे अपने पॉपओवर प्रस्तुति के आकार को बदलने में परेशानी हो रही है। यहाँ अब तककिसी पॉपओवर के आकार को कैसे बदलें

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) // func for popover 
{ 
    if segue.identifier == "popoverView" 
    { 
     let vc = segue.destinationViewController 

     let controller = vc.popoverPresentationController 

     if controller != nil 
     { 
      controller?.delegate = self 
      controller?.sourceView = self.view 
      controller?.sourceRect = CGRect(x:CGRectGetMidX(self.view.bounds), y: CGRectGetMidY(self.view.bounds),width: 315,height: 230) 
      controller?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0) 
     } 
    } 
} 

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

जब मैं preferredContentSize का उपयोग मैं त्रुटि "संपत्ति के लिए आवंटित नहीं किया जा सकता: 'preferredContentSize' अपरिवर्तनीय है" मिल

+0

एक पॉपओवर का उपयोग करने की कोशिश करने के बजाय आप एक मॉडल फॉर्म शीट के रूप में क्यों नहीं पेश करते हैं जिसका इरादा नहीं है? – Wain

+0

संभावित डुप्लिकेट [मैं अपने पॉपव्यू में सामग्री के आकार में स्विफ्ट में कैसे समायोजित करूं?] (Http://stackoverflow.com/questions/29449998/how-do-i-adjust-my-popover-to -इस-ऑफ-द-कंटेंट-इन-माय-टेबलव्यू-इन-स्विफ्ट) –

+0

क्षमा करें, मैंने निर्दिष्ट नहीं किया था। यह आईफोन के लिए होगा। सेब के मुताबिक, आप आईफोन पर एक मॉडल फॉर्म शीट को दोबारा आकार नहीं दे सकते लेकिन आप आईपैड पर कर सकते हैं। जब तक मैं गलत नहीं पढ़ता। साथ ही, मैंने पॉपओवर को फिर से आकार देने के कई अलग-अलग तरीकों की कोशिश की है लेकिन कुछ भी काम नहीं कर रहा है। मुझे यकीन है कि मेरे द्वारा प्रदान किए गए कोड के लिए एक सरल फिक्स है। मुझे अभी तक यह नहीं मिला है। – icestorm0806

उत्तर

37

सेट दृश्य नियंत्रक पर वरीय सामग्री आकार नहीं प्रस्तुत किया जा रहा popoverPresentationController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) // func for popover 
    { 
     if segue.identifier == "popoverView" 
     { 
      let vc = segue.destinationViewController 

      vc.preferredContentSize = CGSize(width: 200, height: 300) 

      let controller = vc.popoverPresentationController 

      controller?.delegate = self 
      //you could set the following in your storyboard 
      controller?.sourceView = self.view 
      controller?.sourceRect = CGRect(x:CGRectGetMidX(self.view.bounds), y: CGRectGetMidY(self.view.bounds),width: 315,height: 230) 
      controller?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0) 

     } 
    } 
5

मैं स्टोरीबोर्ड के माध्यम से इसे ठीक करें: अपने कंट्रोलर पर क्लिक करें विशेषता निरीक्षक व्यू कंट्रोलर> पर क्लिक करें पसंदीदा स्पष्ट आकार और इनपुट मान का उपयोग करें। Check Image

+1

जबकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (// meta.stackoverflow.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। – GhostCat

0

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

self.present(popoverNavigationController!, animated: true) {} 

, यह सिर्फ धक्का से पहले preferredContentSize बदल रहा है: मैं बस पॉपओवर में एक UINavigationController प्रस्तुत करते हैं। उदाहरण के लिए:

let newViewController = NewViewController() 
    popoverNavigationController!.preferredContentSize = CGSize(width: 348, height: 400) 
    popoverNavigationController!.pushViewController(newViewController, animated: true) 

समस्या यह है कि जब हम दृश्य नियंत्रक पॉप करते हैं तो हम पॉपओवर का आकार बदलने का प्रयास करते हैं।

यदि आप पॉपओवर के पसंदीदा सामग्री को बदलने के लिए वर्तमान दृश्य नियंत्रक के ViewWillDisappear का उपयोग करते हैं, तो पॉपओवर आकार बदल जाएगा लेकिन दृश्य नियंत्रक पॉप-अप होने के बाद। इसका मतलब है कि एनीमेशन में देरी है।

आपको पॉपव्यू कंट्रोलर निष्पादित करने से पहले पसंदीदा सामग्री को बदलना होगा। इसका मतलब है कि आपको नेविगेशन बार में एक कस्टम बैक बटन बनाना है जैसे इसे here समझाया गया है।

 self.navigationItem.hidesBackButton = true 
     let newBackButton = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(CurrentViewController.backButtonTapped(sender:)))  
     self.navigationItem.leftBarButtonItem = newBackButton 

और अगले कोड जब नए वापस बटन दबाने चलाएँ:: इस कार्यान्वयन स्विफ्ट 4 के लिए अद्यतन है मूल रूप से

@objc func backButtonTapped(sender: UIBarButtonItem) { 

     self.navigationController?.preferredContentSize = CGSize(width: 348, height: 200) 

     self.navigationController?.popViewController(animated: true) 
    } 

, preferredContentSize धक्का और देखने पॉपिंग से पहले परिवर्तित किया जाना है नियंत्रक।

संबंधित मुद्दे