এম্বেড থাকা নেভিগেশন কন্ট্রোলার সহ পপওভার ব্যাক নেভের আকারটিকে সম্মান করে না


89

আমার কাছে একটি ইউআইএনপিগভারকন্ট্রোলার রয়েছে এমন একটি ইউআইএনএভিগেশন কন্ট্রোলার হোস্ট করছে, এতে ভিউ কন্ট্রোলারের একটি ছোট শ্রেণিবিন্যাস রয়েছে।

আমি দস্তাবেজগুলি অনুসরণ করেছি এবং প্রতিটি দৃশ্যের নিয়ামকের জন্য আমি ভিউটির পপওভার-প্রসঙ্গের আকারটি সেট করে রেখেছি:

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

(প্রতিটি নিয়ামকের জন্য আকার পৃথক)

এই হায়ারার্কিতে এগিয়ে নেভিগেট করার সময় এটি প্রত্যাশার মতো কাজ করে - পপওভারটি স্বয়ংক্রিয়ভাবে ধাক্কা নিয়ন্ত্রকের সাথে মিল রেখে আকার পরিবর্তনগুলি অ্যানিমেট করে।

যাইহোক, আমি যখন নেভিগেশন বারের ব্যাক বোতামের মাধ্যমে ভিউ স্ট্যাকের মাধ্যমে "পিছনে" নেভিগেট করি তখন পপওভারটি আকার পরিবর্তন করে না - এটি গভীরতম দর্শন পৌঁছে যাওয়ার মতো বৃহত্তর থেকে যায়। এটা আমার কাছে ভাঙা মনে হচ্ছে; আমি পপওভারটি যে ভিউ স্ট্যাকের মধ্য দিয়ে পপ করায় সেট আপ করা মাপগুলিকে সম্মান করবে expect

আমি কিছু অনুপস্থিত করছি?

ধন্যবাদ


আপনি পপওভার আকারটি কোথায় সেট করছেন? আপনি যখনই কোনও ভিউ কন্ট্রোলার প্রদর্শিত হয় (যেমন: ইন viewWillAppear:) এটি পুনরায় সেট করছেন ?
ওলে বেগম্যান মায়

আপনি কী ডকুমেন্টেশন মানে আপনি অনুসরণ করেছেন?
টম হামিং

উত্তর:


94

ঠিক আছে, আমি একই সমস্যা নিয়ে লড়াই করছিলাম। উপরের সমাধানগুলির মধ্যে আমার পক্ষে খুব সুন্দরভাবে কাজ হয়নি, এজন্যই আমি একটু তদন্ত করার সিদ্ধান্ত নিয়েছিলাম এবং এটি কীভাবে কাজ করে তা খুঁজে বের করার সিদ্ধান্ত নিয়েছি। এটি আমি আবিষ্কার করেছি: - আপনি যখন সেট করেনcontentSizeForViewInPopoverআপনার দর্শন নিয়ামকটিতে এটি পপওভার নিজেই পরিবর্তিত হবে না - যদিও বিভিন্ন কন্ট্রোলারে নেভিগেট করার সময় পপওভার আকার পরিবর্তন হতে পারে। - যখন বিভিন্ন কন্ট্রোলারে নেভিগেট করার সময় পপওভারের আকার পরিবর্তন হবে, যখন ফিরে যাবেন তখন পপওভারের আকার পুনরুদ্ধার হয় না - ভিউ উইলঅ্যাপিয়ারে পপওভারের আকার পরিবর্তন করা খুব অদ্ভুত অ্যানিমেশন দেয় (যখন বলি যে আপনি পপওভারের অভ্যন্তরে পপকন্ট্রোলারটি বলুন) - আমি এটি সুপারিশ করব না - আমার পক্ষে কন্ট্রোলারের অভ্যন্তরে হার্ডকোডযুক্ত আকারটি নির্ধারণ করা মোটেও কাজ করবে না - আমার কন্ট্রোলারগুলি মাঝে মাঝে বড় হতে হয় - নিয়ামক যা তাদের আকারের সম্পর্কে ধারণা রাখে যদিও

এই সমস্ত ব্যথার সমাধান নিম্নরূপ: currentSetSizeForPopoverভিউডিডঅ্যায়ারে আপনাকে আকারটি পুনরায় সেট করতে হবে । তবে আপনাকে সতর্কতা অবলম্বন করতে হবে, আপনি যখন ক্ষেত্রের মধ্যে ইতিমধ্যে সেট করা একই আকারটি সেট করবেন currentSetSizeForPopoverতখন পপওভার আকারটি পরিবর্তন করবে না। এটি হওয়ার জন্য, আপনি প্রথমে জাল আকারটি সেট করতে পারেন (যা আগে সেট করা ছিল তার চেয়ে আলাদা হবে) তারপরে যথাযথ আকারটি সেট করে। আপনার কন্ট্রোলারটি নেভিগেশন নিয়ন্ত্রকের অভ্যন্তরে বাসা বেঁধে থাকলেও এই সমাধানটি কাজ করবে এবং আপনি নিয়ন্ত্রকদের মধ্যে যখন নেভিগেট করবেন তখন পপওভার সেই অনুযায়ী তার আকার পরিবর্তন করবে।

আপনি নিম্নোক্ত সহায়ক পদ্ধতির সাহায্যে সহজেই ইউআইভিউকন্ট্রোলারে বিভাগ তৈরি করতে পারেন যা আকার নির্ধারণের কৌশলটি করতে পারে:


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

তারপরে এটি কেবল -viewDidAppearকাঙ্ক্ষিত নিয়ামক হিসাবে প্রার্থনা করুন ।


4
উপরের বিভাগটি একমাত্র (বুদ্ধিমান) উপায় যা আমি এটি কার্যকর করতে পারি work ধন্যবাদ
রিকিজি

এইটা কাজ করে. পপওভার সঙ্কুচিত হওয়ার পরে চুক্তির ক্ষেত্রটিতে কীভাবে টেবিলের দৃষ্টিভঙ্গিটিকে "কালো" হতে রক্ষা করতে হবে তা আমার খুঁজে বের করতে হবে, তবে এই সমাধানটি (শেষ পর্যন্ত!) প্রতিটি স্ট্যাক স্তরের জন্য পপওভারকে সঠিক আকারে স্থান দিতে দেয়। ধন্যবাদ!
বেন জোটো

4
আমি এটিকে জড়িয়ে দিয়েছি [ইউআইভিউ সূচনা অ্যানিমেশনগুলি: শূন্য প্রসঙ্গ: শূন্য]; এবং [ইউআইভিউ কমিট অ্যানিমেশনস]; - এটি কম ঝাঁকুনি করে তোলে।
ডাস্টিন

4
আমার জন্য, সেলফো কনটেন্টসাইজফরভিউআইএনপোপওভার = সিজিসিজেজেরো ব্যবহার করে; একটি লাইন সংরক্ষণ এবং একই প্রভাব ছিল। অনেক ধন্যবাদ!
rob5408

আমি কেবলমাত্র এই সমাধানটি কাজ করতে পারলাম যদি আমি স্ব-কনটেন্টসাইজ ফরপপওভার = সিজিসিজেজেরো যুক্ত করি; আমার ভিউতে উইলডিস্পায়ার পদ্ধতিতে আমি যে ভিসিটি পপ করছি।
বিদ্যুৎস্রষ্টিক

18

আমি এটি iOS 7 এবং 8 এর জন্য কীভাবে সমাধান করেছি:

আইওএস 8-এ, আইওএস নিঃশব্দে পপওভারে আপনি যে ভিউটি চান তা উপস্থাপনের ভিউকন্ট্রোলার ভিউ কন্ট্রোলারের উপস্থাপিত ভিউকন্ট্রোলারে মোড়াচ্ছে। একটি 2014 ডাব্লুডাব্লুডিসি ভিডিও রয়েছে যা পপওভারকন্ট্রোলার যেখানে তারা এতে স্পর্শ করবে তাতে নতুন কী তা বোঝায়।

যাইহোক, ন্যাভিগেশন কন্ট্রোলার স্ট্যাকের উপস্থাপিত কন্ট্রোলারদের জন্য যাঁরা নিজেরাই নিজের আকার পরিবর্তন করতে চান, এই ভিউ কন্ট্রোলারদের (আইওএস 8 এর অধীনে) এই কোডটি গতিশীলভাবে পছন্দসই কনটেন্টসাইজ সেট করার জন্য প্রয়োজন:

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

আপনার গণিত টেবিল বা উচ্চতার সাথে উচ্চতা ও টেবিল প্রতিস্থাপন করুন।

প্রচুর সদৃশ কোড এড়ানোর জন্য এবং একটি সাধারণ আইওএস 7 এবং আইওএস 8 সমাধান তৈরি করতে, আমি ইউআইডিএবল ভিউ কনট্রোলারের উপর একটি বিভাগ তৈরি করেছি যখন আমার টেবিলভিউতে ভিউডিডঅ্যাপার বলা হয়:

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

বিভাগ:

#import <UIKit/UIKit.h>

@interface UITableViewController (PreferredContentSize)

- (void) setPopOverViewContentSize;

@end

বিভাগ.মি:

#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

presentingViewControllerকাজের সাথে আপনার পরামর্শ যদি আমি সেট preferredContentSizeমধ্যে viewDidLoadএকটি অদ্ভুত আচরণ আছে: একটি ভুল popover আকার পরিবর্তন করতে popover বিশালাকার অন্য দৃশ্য নিয়ামক থেকে নেভিগেট ফিরে। এটি শূন্যের পপওভার আকার নির্ধারিত হয়ে থাকলেও আকারটি সঠিক। এমন ক্ষেত্রে পপওভার পুরো পর্দার উচ্চতা নেয়। আপনি কি জানেন কেন এমন ঘটনা ঘটে? 600০০ টি পয়েন্ট বাস্তবায়িত করার সাথে আমার কোনও সীমাবদ্ধতা নেই কারণ আমার অভিজ্ঞতায় অপারেটিং সিস্টেম আপনাকে স্ক্রিনের আকারের চেয়ে বেশি আকার নির্দিষ্ট করতে দেয় না।
পরীক্ষা করা হচ্ছে

ভিউডিডএডের পরিবর্তে ভিউডিড অ্যাপের চেষ্টা করুন যাতে আপনি স্ট্যাক ব্যাক আপ নেভিগেট করার সময় কোডটি কার্যকর করে।
ওয়েসলি ফিলিম্যান

আমি যেভাবে নিয়েছিলাম। কিন্তু আমি না কেন এটা হবে যদি আপনি এই সেট কাজ নয় viewDidLoad...
পরীক্ষার

4
দুর্ভাগ্যক্রমে এটি কেবল অ্যাপল ভিউ স্ট্যাকটি যেভাবে লিখেছিল তা নয়। এই কনট্রোল সাইজের মানগুলি একবারে ভিউকন্ট্রোলারটি দৃশ্য থেকে লুকানো থাকে না really এ কারণেই প্রতিবার কোনও দৃশ্যে বা পপ দ্বারা কোনও দৃশ্য অগ্রভাগে আগলে আপনাকে পপওভারটি "স্মরণ করিয়ে দিতে হবে"। আমার সুপারিশটি হ'ল অ্যাপলের সাথে একটি বাগ রিপোর্ট ফাইল করা যদি আপনি ভাবেন যে পপওভারটি এই তথ্যটি বজায় রাখে।
ওয়েসলি ফিলিম্যান

12

এটি ক্র্যাসনিকের উত্তরের একটি উন্নতি ।
আপনার সমাধানটি দুর্দান্ত, তবে এটি সহজেই অ্যানিমেটেড নয়।
সামান্য উন্নতি চমৎকার অ্যানিমেশন দেয়: পদ্ধতিতে

শেষ লাইনটি সরান - (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
{
    [super viewWillAppear:animated];

    [self forcePopoverSize];
}

এবং পরিশেষে - - (void)viewDidAppear:(BOOL)animatedপদ্ধতিতে পছন্দসই আকার সেট করুন :

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

    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
    self.contentSizeForViewInPopover = currentSetSizeForPopover;
}

8

আপনাকে আবার সামগ্রীতে আকার সেট করতে হবে viewWillAppear। ডেলাগেট পদ্ধতিতে কল করে আপনি পপওভারকন্ট্রোলারের আকার নির্ধারণ করেছেন। আমারও একই সমস্যা ছিল। তবে আমি যুক্ত করার পরে এই সমস্যার সমাধান হয়েছে।

আরও একটি জিনিস: আপনি যদি 5 এর চেয়ে কম বিটা সংস্করণ ব্যবহার করেন তবে পপওভারগুলি পরিচালনা করা আরও কঠিন। তারা বিটা সংস্করণ 5 থেকে আরও বন্ধুত্বপূর্ণ বলে মনে হচ্ছে এটি চূড়ান্ত সংস্করণটি শেষ। ;)

আশাকরি এটা সাহায্য করবে.


আমিও এটাকে ঘৃণা করি। এটি আমাকেও ধরেছিল। অ্যাপল: কেন আমরা একটি নির্দিষ্ট আকারে নাভকন্ট্রোলার সহ একটি পপওভার লক করতে পারি না ?!
জান্ন 4'10

4
সামগ্রীর আকার নির্ধারণ করা viewWillAppearআমার পক্ষে কাজ করে না। পপওভারের আকারটি সুস্পষ্টভাবে নির্ধারণ করা কার্যকরভাবে কাজ করেছিল, তবে এটি ঘেটো।
বেন জোটো

@ কিক্সোটো আপনার সমস্যাটি আমি কী তা করি না তবে আমি এখনও একই জিনিসটি ব্যবহার করি এবং এটি পুরোপুরি কার্যকর হয়।
মধুপ সিং যাদব

5

ইন -(void)viewDidLoadআপনি গৌণ নিয়ামক ব্যবহার করছেন সব দৃশ্যে নিয়ন্ত্রক, যোগ করুন:

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

3

আমি ভিউইলডিস্পায়ারে আকারটি পুনরায় সেট করেছি: (বিওওএল) যেখান থেকে ফিরে নেভিগেট করা হচ্ছে সেই ভিউ কন্ট্রোলারের অ্যানিমেটেড পদ্ধতি:

-(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;
}

হুম .. রিসেটের দরকার ছিল না। আমি সেলফোন কনটেন্টসাইজফরভিউআইএনপপওভার = সেল্ফ.ভিউ.ফ্রেম.সাইজে সমস্ত ভিউ কন্ট্রোলারের সমস্ত ভিউউইলঅ্যাপে রেখেছি।
একাকী

আমি ফেচারডসাল্টস কন্ট্রোলার ফেচডঅবজেক্টসের জন্য কী রাখব? এটি কাজ করতে পারে না
জুলাই

2

আইওএস 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;
}

বিটিডব্লু আমার ধারণা, এটি পূর্ববর্তী আইওএস সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত ...


আমি আইওএস 8-তে একটি অ্যাপ্লিকেশন নিয়ে আইওএস 7 এসডিকে সংকলিত হয়েছি। ধন্যবাদ, ধন্যবাদ।
Climbatize

রোটেশন পরিবর্তন করার সময় মাপ ঠিক করার জন্য willTransitionToTraitCollection, animateAlongsideTransitionসমাপ্তি ব্লকে এই পদ্ধতিটিতে কল করুন ।
গেভা

2
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 !

1

আমার জন্য এই সমাধানগুলি কাজ করে। এটি আমার ভিউ কন্ট্রোলারের একটি পদ্ধতি যা ইউআইটিএবলভিউ কনট্রোলার প্রসারিত করে এবং এটি ইউআইএনএভিগেশন কন্ট্রোলারের জন্য মূল নিয়ামক।

-(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]; 
 }

1

আপনি যদি ধারণাটি কল্পনা করতে পারেন তবে আমার ধারণা এটি কিছুটা ভাল is

- (শূন্য) ফোর্সপোভারসাইজ {
    সিজি সাইজ কারেন্টসাইটসিজফরপপওভার = সেলফ কন্টেন্টসাইজ ফরভিউআইএনপপওভার;
    self.contentSize ForViewInPopover = CGSizeMake (0, 0);
    সেল্ফকন্টেন্টসাইজফোর্ডভিউআইএনপপওভার = কারেন্টসেটসাইজফোর্ডপোভার;
}

4
এর চেয়ে আরও ভাল ব্যবহারের CGSizeZeroপরিবর্তে এটি নিজের দ্বারা তৈরি করা হবেCGSizeMake(0,0)
জুলিয়ান ক্রোল

1

গৃহীত উত্তর আইওএস 8. আমি আমার নিজের উপশ্রেণী তৈরি হয়েছিল কি সাথে জরিমানা কাজ করছে না UINavigationControllerযে popover ব্যবহারের জন্য এবং পদ্ধতি ওভাররাইড preferredContentSizeএই ভাবে:

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

তাছাড়া, এর পরিবর্তে কলিং forcePopoverSize(পদ্ধতি @krasnyk দ্বারা বাস্তবায়িত) এ viewDidAppearআমি পূর্বে উল্লিখিত গৌণ (popover মধ্যে) একটি প্রতিনিধি হিসাবে একটি viewController (যা শো popover) সেট করুন এবং (কি বল পদ্ধতি আছে) না করার সিদ্ধান্ত নিয়েছে:

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

একটি পাসের জন্য প্রতিনিধি পদ্ধতি viewController। একটি গুরুত্বপূর্ণ বিষয়, forcePopoverSizeকোনও UINavigationControllerDelegateপদ্ধতিতে করা ঠিক আছে যদি আপনার যদি সেই অ্যানিমেশনটি মসৃণ করার দরকার হয় না তবে এটি এটিকে রেখে দিন viewDidAppear


কেন ভোট কম? কেবল মতবিরোধের চেয়ে কিছু প্রতিক্রিয়া ভিন্ন হতে পারে :)
জুলিয়ান ক্রোল

হ্যালো @ JulianKról, আপনি এই কটাক্ষপাত থাকতে পারে stackoverflow.com/questions/28112617/... , আমি একই সমস্যা আছে।
রঞ্জিত

ধন্যবাদ, এটি আমাকে সাহায্য করেছে। আপনার মন্তব্যের শীর্ষে এটি স্পষ্ট করে তুলতে চান যে সমস্যাটি আপনার নেভিগেশনকন্ট্রোলার পছন্দসই কনটেন্টসাইজ পাশাপাশি দৃশ্যমানভিসি পছন্দসই কনটেন্টসাইজ আপডেট করতে হবে। সুতরাং তাদের উভয় নির্ধারণ সরাসরি কাজ করে।
মাইকেল কেরনাহান

0

আমি একই সমস্যার মুখোমুখি হয়েছি, তবে আপনি ভিউউইল অ্যাপয়ার বা ভিউইলডিস্পায়ার পদ্ধতিতে বিষয়বস্তু সেট করতে চান না।

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];

নিয়ন্ত্রককে নেভিগেশনকন্ট্রোলারের দিকে ঠেলে দেওয়ার আগে বিষয়বস্তু সাইজ ফরভিউআইএনপোভারের সম্পত্তি সেট করুন


0

আমি ভিডিডিপায়ারে নিম্নলিখিতটি রেখে ভাগ্য পেয়েছি:

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

যদিও আপনি বিভিন্ন আকারের পপওভারগুলি চাপ দিচ্ছেন / পপিং করছেন ক্ষেত্রে এটি সুন্দরভাবে অ্যানিমেট নাও হতে পারে। তবে আমার ক্ষেত্রে, পুরোপুরি কাজ করে!


0

আপনাকে যা করতে হবে তা হ'ল:

-পপ-ওভারস কনটেন্টভিউয়ের ভিউউইল অ্যাপয়ার পদ্ধতিতে নীচে দেওয়া স্নিপেট যুক্ত করুন। লোড হওয়ার পরে আপনাকে প্রথমবার পপওভারের আকার নির্দিষ্ট করতে হবে।

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

0

শুরুতে আমার পপওভার নিয়ামক যার পপওভার কনসেন্টসাইজ = সিজি সাইজমেক (320, 600) এর সাথে আমার এই সমস্যাটি ছিল, তবে এটির কন্টেন্টভিউকন্ট্রোলার (একটি ইউআইএনএভিগেশন কন্ট্রোলার) নেভিগেট করার সময় আরও বড় হয়ে উঠবে।

ন্যাভি কন্ট্রোলার কেবলমাত্র কাস্টম ইউআইটিএবলভিউ কনট্রোলারদেরকে চাপ দিচ্ছে এবং পপিং করছিল, সুতরাং আমার কাস্টম টেবিল ভিউতে নিয়ামক শ্রেণীর ভিউডিজল্ড আমি সেলফোনসেন্টসাইজ ফরভিউআইএনপপওভার = সিজি সাইজমেক (320, 556) সেট করি

44 টি কম পিক্সেল ন্যাভ কন্ট্রোলারের এনএভি বারের জন্য অ্যাকাউন্ট করতে হবে এবং এখন আমার আর কোনও সমস্যা নেই।


0

আপনি পপওভারের ভিতরে চাপ দিচ্ছেন এমন সমস্ত দর্শনীয় কন্ট্রোলারে এটি রাখুন

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

ভিউওলিপিয়ার পদ্ধতিতে এবং বর্তমানসেটসাইজফোরপোভার আপনার পছন্দসই আকার সেট করে।
অলোক

0

একই ইস্যুটির মুখোমুখি হয়েছি এবং ইউআইপিপভারকন্ট্রোলার চালিত হওয়ার আগে কনটেন্ট ভিউয়ের আকারটি নেভিগেশন কন্ট্রোলারে এবং ভিউ কন্ট্রোলারে সেট করে এটি ঠিক করেছে।

     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];

0

আমি ঠিক আর একটি সমাধান দিতে চাই, কারণ এর কোনওটিই আমার পক্ষে কাজ করে নি ...

আমি এটি এই 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;

}

তারপরে শিশু দর্শনগুলির জন্য পুনরাবৃত্তি করুন ...


0

এটি করার জন্য আইওএস 7-র সঠিক উপায়, নেভিগেশন স্ট্যাকের প্রতিটি ভিউ কন্ট্রোলারে ভিউডিডলডে পছন্দসই সামগ্রীর আকার সেট করুন (কেবল একবারই সম্পন্ন করা হয়েছে)। তারপরে ভিউ অ্যাপ্লিকেশনটিতে পপওভার নিয়ামকটির একটি রেফারেন্স পান এবং সেখানে কন্টেন্টসাইজ আপডেট করুন।

-(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];
}

0

@ ক্রেস্নেক সমাধান আগের আইওএস সংস্করণগুলিতে ভাল কাজ করেছে তবে আইওএস 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];
        }
    }

এটি সেরা সমাধান নয়, তবে এটি কার্যকর হয়।

নতুন ইউআইপিপওভারপ্রেজেশন কনট্রোলারেরও পুনরায় আকার দেওয়ার বিষয়টি রয়েছে :(।


4
সম্ভবত অ্যাপডেলিগেট সম্পত্তি থেকে ভিউ কন্ট্রোলারে পৌঁছানোর পরিবর্তে আমার সমাধানটি বিবেচনা করুন (পরিষ্কার বলে মনে হচ্ছে)
জুলিয়ান ক্রোল

হ্যাঁ, আমার বিদ্যমান কোডবেসগুলির কোনও পরিবর্তন না করে এটিই ছিল দ্রুততম সমাধান। বিটিডাব্লু ভিএল আপনার সমাধানটি চেষ্টা করুন
ক্লিমেন্ট প্রেম

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.