আইওএস 13 ফুলস্ক্রিনে মডেল উপস্থাপন করা হচ্ছে


463

আইওএস 13-তে উপস্থাপিত হওয়ার সময় মডেল ভিউ কন্ট্রোলারের জন্য একটি নতুন আচরণ রয়েছে।

এখন এটি ডিফল্টরূপে পূর্ণস্ক্রিন নয় এবং আমি যখন স্লাইড করার চেষ্টা করি তখন অ্যাপটি স্বয়ংক্রিয়ভাবে ভিউ কন্ট্রোলারকে বরখাস্ত করে।

আমি কীভাবে এই আচরণটি রোধ করতে পারি এবং পুরাতন ফুলস্ক্রিন মডেল ভিসিতে ফিরে যেতে পারি?

মডেল আচরণ

ধন্যবাদ

উত্তর:


620

ডাব্লুডাব্লুডিসি 2019 এর সময় ইউনিয়নের প্ল্যাটফর্ম রাজ্যে বর্ণিত আইওএস 13 এর সাথে অ্যাপল একটি নতুন ডিফল্ট কার্ড উপস্থাপনা চালু করেছিল introduced পূর্ণস্ক্রিনকে জোর করার জন্য আপনাকে এটিকে স্পষ্টভাবে উল্লেখ করতে হবে:

let vc = UIViewController()
vc.modalPresentationStyle = .fullScreen //or .overFullScreen for transparency
self.present(vc, animated: true, completion: nil)

81
আমি বলব এটি ডিফল্ট হিসাবে বেশি দিন থাকবে না। fullScreenবিকল্পটি ডিফল্টরূপে অবিচ্ছিন্ন UI 'তে অপরিবর্তিত রাখার জন্য হওয়া উচিত।
জাকুব ট্রুহলি

17
আমি এটি বিশ্বাস করব না। অতীতে, অ্যাপল প্রায়শই ডিফল্ট পরিবর্তন করে কেবল তখনই সক্রিয় হয়ে যায় যখন আপনি বর্তমান এসডিকে সঙ্গে যুক্ত করছেন। পূর্ববর্তী সংস্করণগুলির সাথে লিঙ্ক করার সময় আমরা আশা করি পুরানো আচরণটি পাব।
DrMickeyLauer

11
আমি নিশ্চিত করতে পারি যে আইওএস 13 সিমুলেটারে চালিত এক্সকোড -10 নির্মিত অ্যাপ্লিকেশনগুলি এখনও পুরো স্ক্রিনে ডিফল্ট হয়। @ ডিআরমিউকিলেউর যেমন বলেছিলেন, এক্সকোড 11 দিয়ে বিল্ডিংয়ের ফলে অ্যাপটিটি নতুন আচরণে সক্রিয় হয়। isModalInPresentationসোয়াইপ ইশারাটি বরখাস্ত করা থেকে অবরুদ্ধ করতে ব্যবহার করুন । আরও তথ্যের জন্য আমার ব্লগ পোস্টটি দেখুন: मध्यम.com
জেফ হ্যাকওয়ার্থ

5
আমি ওভারফুলস্ক্রিনের পরিবর্তে .ফুলস্ক্রিন ব্যবহার করার পরামর্শ দিচ্ছি। .fullScreen দাবানল viewWillAppear এবং viewDidAppear, .overFullScreen যে করে না
PiterPan

5
সময় .automaticকেটে গেছে এবং শৈলীটি ডিফল্ট হিসাবে স্থির হয়েছে, যা (বেশিরভাগ দর্শকদের জন্য) .pageSheetশৈলী। তবে কিছু সিস্টেম ভিউ কন্ট্রোলাররা এটি আলাদা স্টাইলে মানচিত্র করতে পারে।
জাকুব ট্রুহলি

186

আমি এমন একটি তথ্য যুক্ত করছি যা কারও পক্ষে কার্যকর হতে পারে। যদি আপনি কোন স্টোরিবোর্ড segue, পুরানো শৈলী ফিরে যেতে থাকে, তাহলে আপনি সেট করতে হবে ধরনের থেকে সম্পত্তি বর্তমান Modally এবং উপস্থাপনা করার সম্পত্তি পূর্ণ স্ক্রীণ

এখানে চিত্র বর্ণনা লিখুন


2
ইন্টারফেস বিল্ডারে কি কোনও উপায় আছে মডেলআইএনপ্রেসেশন?
ব্র্যাড থমাস

এর সাথে একমত সর্বোচ্চ স্তরের আপত্তিকর দর্শন (গুলি) এর জন্য উপস্থাপনা মানটি পরিবর্তন করুন।
ডেভিড

এই যে আমার জন্য কাজ করেছে কারণ আমার আছে performSegue। ধন্যবাদ বন্ধু!
ব্লেসানকা

95

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

fix_storyboard_presentation_default_behavior


1
স্টোরিবোর্ডের মাধ্যমে একের পরিবর্তে সমস্ত দেখার জন্য এই প্রোগ্রামটিমেটিকভাবে করার কোনও উপায় আছে কি?
The1993

@ The1993 আপনি কি এর কোনও বিকল্প খুঁজে পেয়েছেন?
শোভিত পুরী

1
@ShobhitPuri আছে প্রথম এখানে Omreyh দ্বারা সমাধান কটাক্ষপাত stackoverflow.com/a/58255416/4323101
The1993

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

91

এটি করার একাধিক উপায় রয়েছে এবং আমি মনে করি প্রত্যেকেই একটি প্রকল্পের জন্য ফিট করতে পারে তবে অন্যটির জন্য নয়, তাই আমি ভেবেছিলাম আমি এগুলি এখানে রাখব হয়তো অন্য কেউ অন্য কোনও ক্ষেত্রে চলে যাবে।

1- উপস্থিত ওভাররাইড

আপনার যদি একটি থাকে তবে BaseViewControllerআপনি present(_ viewControllerToPresent: animated flag: completion:)পদ্ধতিটি ওভাররাইড করতে পারেন ।

class BaseViewController: UIViewController {

  // ....

  override func present(_ viewControllerToPresent: UIViewController,
                        animated flag: Bool,
                        completion: (() -> Void)? = nil) {
    viewControllerToPresent.modalPresentationStyle = .fullScreen
    super.present(viewControllerToPresent, animated: flag, completion: completion)
  }

  // ....
}

এই পদ্ধতিটি ব্যবহার করে আপনাকে কোনও presentকলটিতে কোনও পরিবর্তন করার দরকার নেই , যেমন আমরা কেবল presentপদ্ধতিটি ওভাররড করেছি ।

2- একটি এক্সটেনশন:

extension UIViewController {
  func presentInFullScreen(_ viewController: UIViewController,
                           animated: Bool,
                           completion: (() -> Void)? = nil) {
    viewController.modalPresentationStyle = .fullScreen
    present(viewController, animated: animated, completion: completion)
  }
}

ব্যবহার:

presentInFullScreen(viewController, animated: true)

3- একজন ইউআইভিউকন্ট্রোলারের জন্য

let viewController = UIViewController()
viewController.modalPresentationStyle = .fullScreen
present(viewController, animated: true, completion: nil)

4- স্টোরিবোর্ড থেকে

একটি সিগ নির্বাচন করুন এবং এতে উপস্থাপনাটি সেট করুন FullScreen
এখানে চিত্র বর্ণনা লিখুন

5- সুইজলিং

extension UIViewController {

  static func swizzlePresent() {

    let orginalSelector = #selector(present(_: animated: completion:))
    let swizzledSelector = #selector(swizzledPresent)

    guard let orginalMethod = class_getInstanceMethod(self, orginalSelector), let swizzledMethod = class_getInstanceMethod(self, swizzledSelector) else{return}

    let didAddMethod = class_addMethod(self,
                                       orginalSelector,
                                       method_getImplementation(swizzledMethod),
                                       method_getTypeEncoding(swizzledMethod))

    if didAddMethod {
      class_replaceMethod(self,
                          swizzledSelector,
                          method_getImplementation(orginalMethod),
                          method_getTypeEncoding(orginalMethod))
    } else {
      method_exchangeImplementations(orginalMethod, swizzledMethod)
    }

  }

  @objc
  private func swizzledPresent(_ viewControllerToPresent: UIViewController,
                               animated flag: Bool,
                               completion: (() -> Void)? = nil) {
    if #available(iOS 13.0, *) {
      if viewControllerToPresent.modalPresentationStyle == .automatic {
        viewControllerToPresent.modalPresentationStyle = .fullScreen
      }
    }
    swizzledPresent(viewControllerToPresent, animated: flag, completion: completion)
   }
}

ব্যবহার:
আপনার AppDelegateঅভ্যন্তরে application(_ application: didFinishLaunchingWithOptions)এই লাইনটি যুক্ত করুন:

UIViewController.swizzlePresent()

এইভাবে ব্যবহার করে আপনাকে কোনও বর্তমান কলটিতে কোনও পরিবর্তন করার দরকার নেই, কারণ আমরা রানটাইমটিতে বর্তমান পদ্ধতি প্রয়োগটি প্রতিস্থাপন করছি।
আপনি কি সুইজিং করছে তা জানতে হলে আপনি এই লিঙ্কটি দেখতে পারেন: https://nshipster.com/swift-objc-runtime/


আমার প্রকল্পে আমার অনেক ভিউ কনট্রোলার রয়েছে তবে বেস ক্লাস নেই, আমি সুইজলিং করতে চাই না কোডটিতে নূন্যতম পরিবর্তন সহ এর জন্য আপনার কোনও সমাধান আছে
গুরু

আমি সুইজলিং ব্যবহার করেছি, তবে আমি। পৃষ্ঠার শীটটি শর্তে যুক্ত করেছি .... যদি ভিউকন্ট্রোলারটোপ্রেমিশন.মোডালপ্রেমেশনেশন স্টাইল == .পেজপত্রক || ভিউকন্ট্রোলারটোপ্রেমশন.মোডালপ্রেজেন্টেশনস্টাইল == .আউটমেটিক {ভিউকন্ট্রোলারটোপ্রেমড.মডালপ্রেজেন্টেশনস্টাইল = .ফুলস্ক্রিন}
ক্রাশ

আমি 1 নম্বর প্রয়োগের সমাধান যুক্ত করার পরে স্থিতি বারটি লুকিয়ে থাকে
গণেশ পওয়ার

4
সুইজলিং এমন একটি সমাধান যা কিছুক্ষণের জন্য দুর্দান্ত কাজ করে। যাইহোক, ফেসবুক লগিন (আজকের হিসাবে 5.8) এবং গুগলসিগিনের মতো কিছু বাহ্যিক এসডিএস ব্যবহার করার সময় আমি লক্ষ্য করেছি যে এই পদ্ধতিটি সেই প্রবাহকে ভঙ্গ করে: আমরা আইপ্যাডে একটি সাদা পর্দা পাই। এটি সম্ভবত তাদের নিজস্ব সুইজলিং পদ্ধতিটি ব্যবহার করার কারণে হয়েছে
তাও-

39

আমি আইওএস 13 এর জন্য সুইজলিং ব্যবহার করেছি

import Foundation
import UIKit

private func _swizzling(forClass: AnyClass, originalSelector: Selector, swizzledSelector: Selector) {
    if let originalMethod = class_getInstanceMethod(forClass, originalSelector),
       let swizzledMethod = class_getInstanceMethod(forClass, swizzledSelector) {
        method_exchangeImplementations(originalMethod, swizzledMethod)
    }
}

extension UIViewController {

    static let preventPageSheetPresentation: Void = {
        if #available(iOS 13, *) {
            _swizzling(forClass: UIViewController.self,
                       originalSelector: #selector(present(_: animated: completion:)),
                       swizzledSelector: #selector(_swizzledPresent(_: animated: completion:)))
        }
    }()

    @available(iOS 13.0, *)
    @objc private func _swizzledPresent(_ viewControllerToPresent: UIViewController,
                                        animated flag: Bool,
                                        completion: (() -> Void)? = nil) {
        if viewControllerToPresent.modalPresentationStyle == .pageSheet
                   || viewControllerToPresent.modalPresentationStyle == .automatic {
            viewControllerToPresent.modalPresentationStyle = .fullScreen
        }
        _swizzledPresent(viewControllerToPresent, animated: flag, completion: completion)
    }
}

তারপর এই রাখুন

UIViewController.preventPageSheetPresentation

কোথাও

উদাহরণস্বরূপ AppDelegate এ

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool {

    UIViewController.preventPageSheetPresentation
    // ...
    return true
}

3
আপনার একাধিক মডেল থাকলে সবচেয়ে সহজ সমাধান।
রায়সাল ক্যালিকট

কোথাও এর অর্থ, এর অর্থ কোন ফাইলের মধ্যে বা কোথায় পুরো প্রকল্পে
ইয়াতেন্দ্র

কোথাও আপনি, আমি এটিকে প্রশংসায় ফেলেছি static letঅলস, আপনি এটি পড়তে হবে এটি একবার গুনতে হবে, অলস ভারটি কেবল একবার গণনা করতে হবে, আমি এটি গ্যারান্টি পেতে ব্যবহার করি যে সুইজলিং একবার বলেছিল
ম্যাক্সিম

37

উদ্দেশ্য-সি ব্যবহারকারীদের জন্য

শুধু এই কোড ব্যবহার করুন

 [vc setModalPresentationStyle: UIModalPresentationFullScreen];

অথবা আপনি যদি এটি আইওএস 13.0 এ বিশেষ যুক্ত করতে চান তবে ব্যবহার করুন

 if (@available(iOS 13.0, *)) {
     [vc setModalPresentationStyle: UIModalPresentationFullScreen];
 } else {
     // Fallback on earlier versions
 }

2
এটি আগের আইওএস সংস্করণেও কাজ করে, তবে উত্তরটি ভাল
ক্যাটালিন

4
ইউআইমোডালপ্রেজেন্টেশনফুলস্ক্রিন আইওএস ৩.২+ এর সাথে কাজ করে। সুতরাং অন্য শর্ত যদি যোগ করার প্রয়োজন নেই।
শিখা 3

2
আইওএস 13.1.2 এ কোনও কারণে কেবল ওবজ-সি ক্লাসে এটি কাজ করছে না এবং মডেলপ্রেজেন্টেশন স্টাইল কেবল একটি পৃষ্ঠা শিট প্রদর্শন করছে। এটি কি অন্য কারও জন্য ঘটছে?
সেভি 11

@ সেভি 11 আমি আইওএস 13.1.2 এ আপডেট হয়নি তবে 13.1
9to5ios এ

হাই @ সেভি 11 আমি আমার আইওএস 13.1.2 আপডেট করেছি এবং এটির কাজ ঠিক আছে, দয়া করে আপনার শেষে দেখুন
9to5ios

36

এক রৈখিক:

modalPresentationStyleউপস্থাপন করা হচ্ছে যা নেভিগেশন কন্ট্রোলার সেট করা প্রয়োজন ।


আইওএস 13 এবং এর নীচে আইওএস সংস্করণটি পূর্ণ স্ক্রিন সহ overCurrentContextএবং এর সাথে navigationController

পরীক্ষিত কোড

let controller = UIViewController()
let navigationController = UINavigationController(rootViewController: controller)
navigationController.modalPresentationStyle = .overCurrentContext
self.navigationController?.present(navigationController, animated: true, completion: nil)

মোডালপ্রেজেন্টেশন স্টাইলের জন্য নেভিগেশনকন্ট্রোলার সেট করা দরকার ।


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

@ প্রতীক সোধা। এই কোন সাহায্য? stackoverflow.com/questions/61429600/…
ডেভিড

এই কোন সাহায্য @Womble stackoverflow.com/questions/61429600/...
ডেভিড

25

একটি ইঙ্গিত হিসাবে: আপনি যদি ViewControllerকোনওটির অভ্যন্তরে এম্বেড থাকা কোনওটিতে উপস্থিত কল করেন তবে আপনাকে ভিসিকে নয়, NavigationControllerসেট করতে NavigationControllerহবে .fullScreen

আপনি এটি @ ডেভিডবেটসের মতো করতে পারেন বা আপনি এটি প্রোগ্রামালিকভাবে করতে পারেন (যেমন @ পাসবালব্রোস)।

উদাহরণ উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

    //BaseNavigationController: UINavigationController {}
    let baseNavigationController = storyboard!.instantiateViewController(withIdentifier: "BaseNavigationController")
    var navigationController = UINavigationController(rootViewController: baseNavigationController)
    navigationController.modalPresentationStyle = .fullScreen
    navigationController.topViewController as? LoginViewController
    self.present(navigationViewController, animated: true, completion: nil)

19

আমার দুটোই করা দরকার:

  1. পূর্ণ স্ক্রীন হিসাবে উপস্থাপনা শৈলী সেট করুন

    পূর্ণ পর্দা

  2. শীর্ষ বারটি স্বচ্ছ নেভিগেশন বার হিসাবে সেট করুন

শীর্ষ বার


এটি একটি খুব আশ্চর্যজনক ধারণা যে সিমুলেটেড মেট্রিক্সের কিছু বিকল্প আপনাকে উপস্থাপনা শৈলীতে পরিবর্তন করতে সহায়তা করে
আলেকজান্ডার কুলাবখভ

14

modalPresentationStyleউপস্থাপনের আগে পরিবর্তন করুন

vc.modalPresentationStyle = UIModalPresentationFullScreen;

13

একটি লাইন কোডিং না করে এখানে একটি সহজ সমাধান।

  • স্টোরিবোর্ডে দেখুন নিয়ন্ত্রক নির্বাচন করুন
  • বৈশিষ্ট্য পরিদর্শক নির্বাচন করুন
  • নীচের চিত্র অনুসারে উপস্থাপনা "স্বয়ংক্রিয় "টিকে" ফুলস্ক্রিন "এ সেট করুন

এই পরিবর্তনটি আইপ্যাড অ্যাপ্লিকেশন আচরণটিকে প্রত্যাশার মতো করে তোলে অন্যথায় নতুন পর্দাটি পপআপ হিসাবে পর্দার কেন্দ্রে প্রদর্শিত হচ্ছে।

এখানে চিত্র বর্ণনা লিখুন


আমি মনে করি যে এখানে কী মূলত তা হ'ল আপনি এটি নেভিগেশনকন্ট্রোলারে করেছিলেন, যা চিত্রটি দেখায় তবে পাঠ্যটি এভাবে বলে না।
অ্যান্ডি ওয়াইনস্টাইন

1
এটিও নিশ্চিত করুন যে পরবর্তী বিভাগগুলি "প্রদর্শন করুন" এবং "উপস্থাপিতভাবে উপস্থিত" নয়
অ্যান্ডি ওয়াইনস্টাইন

ঠিক আছে, সুতরাং যখন আমি অন্য ভিউগুলি নিয়ন্ত্রণ করতে একটি ট্যাব বার নিয়ামক ব্যবহার করি তখন এটি আমার পক্ষে কাজ করে। যাইহোক, আপনাকে সত্যিকারের 'ট্যাব বার নিয়ন্ত্রক'র উপস্থাপনাটি পুরো স্ক্রিনে সেট করতে হবে কারণ এটি অন্যান্য সমস্ত মতামত নিয়ন্ত্রণ করে।
চার্লি

12

আপনার যদি এম্বেডড নেভিগেশন কন্ট্রোলারগুলির সাথে স্ক্রিনগুলির সাথে একটি ইউআইটিএবস কনট্রোলার থাকে তবে আপনাকে নীচের ছবিতে ইউআইটিএবস কনট্রোলার উপস্থাপনাটি পুরো স্ক্রিনে সেট করতে হবে

এখানে চিত্র বর্ণনা লিখুন


12

অবজেক্টিভ-সি এর সমাধান এখানে

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ViewController *vc = [storyBoard instantiateViewControllerWithIdentifier:@"ViewController"];

vc.modalPresentationStyle = UIModalPresentationFullScreen;

[self presentViewController:vc animated:YES completion:nil];


8

বিভাগগুলি ব্যবহার করে অবজেক্টিভিতে আমার সংশোধন করার সংস্করণটি এখানে। এই পদ্ধতির সাহায্যে আপনার ডিফল্ট ইউআইমোডালপ্রেজিশন স্টাইলফুলস্ক্রিন আচরণ থাকবে যতক্ষণ না অন্য একটি সুস্পষ্টভাবে সেট আপ করে।

#import "UIViewController+Presentation.h"
#import "objc/runtime.h"

@implementation UIViewController (Presentation)

- (void)setModalPresentationStyle:(UIModalPresentationStyle)modalPresentationStyle {
    [self setPrivateModalPresentationStyle:modalPresentationStyle];
}

-(UIModalPresentationStyle)modalPresentationStyle {
    UIModalPresentationStyle style = [self privateModalPresentationStyle];
    if (style == NSNotFound) {
        return UIModalPresentationFullScreen;
    }
    return style;
}

- (void)setPrivateModalPresentationStyle:(UIModalPresentationStyle)modalPresentationStyle {
    NSNumber *styleNumber = [NSNumber numberWithInteger:modalPresentationStyle];
     objc_setAssociatedObject(self, @selector(privateModalPresentationStyle), styleNumber, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (UIModalPresentationStyle)privateModalPresentationStyle {
    NSNumber *styleNumber = objc_getAssociatedObject(self, @selector(privateModalPresentationStyle));
    if (styleNumber == nil) {
        return NSNotFound;
    }
    return styleNumber.integerValue;
}

@end

আপনার কাছে .h ফাইল আছে?
পেড্রো গেস

@ পেড্রোজেস হ্যাঁ, তবে এটি কেবল বিভাগ ঘোষণার সমন্বয়ে রয়েছে: `` `@ আন্তঃ পৃষ্ঠ ইউআইভিউ কনট্রোলার (উপস্থাপনা) @ এন্ড` ``
আলেকজান্ডার কুলাবখভ

7

অন্যান্য সমস্ত উত্তরগুলি যথেষ্ট তবে আমাদের মতো বৃহত প্রকল্পের জন্য এবং যেখানে কোড এবং স্টোরিবোর্ডে ন্যাভিগেশন করা হচ্ছে, এটি বেশ কঠিন কাজ।

এখানে চিত্র বর্ণনা লিখুন

যারা সক্রিয়ভাবে স্টোরিবোর্ড ব্যবহার করছেন তাদের জন্য। এটি আমার পরামর্শ: রেজেজ ব্যবহার করুন।

পূর্ণ পর্দার পৃষ্ঠাগুলির জন্য নিম্নলিখিত ফর্ম্যাটটি ভাল নয়:

<segue destination="Bof-iQ-svK" kind="presentation" identifier="importSystem" modalPresentationStyle="fullScreen" id="bfy-FP-mlc"/>

সম্পূর্ণ পর্দার পৃষ্ঠাগুলির জন্য নিম্নলিখিত ফর্ম্যাটটি ভাল:

<segue destination="7DQ-Kj-yFD" kind="presentation" identifier="defaultLandingToSystemInfo" modalPresentationStyle="fullScreen" id="Mjn-t2-yxe"/>

ভিএস কোডের সাথে সামঞ্জস্যপূর্ণ নিম্নলিখিত রেইজেক্স সমস্ত ওল্ড স্টাইল পৃষ্ঠাগুলিকে নতুন স্টাইল পৃষ্ঠায় রূপান্তর করবে। আপনি যদি অন্যান্য রেজেক্স ইঞ্জিন / পাঠ্য সম্পাদক ব্যবহার করছেন তবে আপনাকে বিশেষ অক্ষরগুলি থেকে বাঁচতে হবে।

অনুসন্ধান রেজেক্স

<segue destination="(.*)"\s* kind="show" identifier="(.*)" id="(.*)"/>

রেজেক্স প্রতিস্থাপন করুন

<segue destination="$1" kind="presentation" identifier="$2" modalPresentationStyle="fullScreen" id="$3"/>

4

প্রাথমিকভাবে, ডিফল্ট মানটি fullscreenমোডালপ্রেজেন্টেশন স্টাইলের জন্য, তবে আইওএস 13-এ এর পরিবর্তনগুলিUIModalPresentationStyle.automatic

আপনি যদি পূর্ণ-স্ক্রিন ভিউ নিয়ন্ত্রণকারী করতে চান তবে আপনাকে এতে পরিবর্তন করতে modalPresentationStyleহবেfullScreen

পড়ুন UIModalPresentationStyle আপেল ডকুমেন্টেশন আরো বিস্তারিত জানার জন্য এবং পড়ুন নির্দেশিকা ইন্টারফেস আপেল মানুষের যেখানে যা প্রকারতা ব্যবহার করা উচিত জন্য।


আপনি যে কোনও পরিস্থিতিতে নেভিগেশনকন্ট্রোলারের কাছ থেকে একটি ভিউ কনট্রোলার উপস্থাপন করতে চান এমন পরিস্থিতিতে iOS 13.3, এক্সকোড 11.3 হিসাবে সঠিক উত্তর। ওভারফুলস্ক্রিনের একটি মডেলপ্রেজেন্টেশন স্টাইলও কাজ করে। তবে, আপনি যদি নেভিগেশনকন্ট্রোলার উপস্থাপন করছেন, তবে আপনাকে ভিউকন্ট্রোলার নয়, নেভিগেশনকন্ট্রোলারে 'মোডালপ্রেজেনশন স্টাইল' সেট করতে হবে। চিয়ার্স।
Womble

3

আপনি সহজেই এটি করতে পারেন উত্স কোড হিসাবে আপনার স্টোরিবোর্ডটি খুলুন এবং kind="presentation"প্রকারের সাথে সমস্ত সিগ ট্যাগটিতে উপস্থাপন করুন একটি অতিরিক্ত বৈশিষ্ট্য যুক্ত করুনmodalPresentationStyle="fullScreen"


2
let Obj = MtViewController()
Obj.modalPresentationStyle = .overFullScreen
self.present(Obj, animated: true, completion: nil)

// আপনি যদি এতে অস্বীকার করতে সোয়াইপ অক্ষম করতে চান তবে লাইন যুক্ত করুন

Obj.isModalInPresentation = true

আরও তথ্যের জন্য অ্যাপল নথি পরীক্ষা করুন Check


2

আমি পদ্ধতিটি সুইজলিং (সুইফট ৪.২) ব্যবহার করে এটি অর্জন করেছি:

নিম্নলিখিত হিসাবে একটি ইউআইভিউকন্ট্রোলার এক্সটেনশন তৈরি করতে

extension UIViewController {

    @objc private func swizzled_presentstyle(_ viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?) {

        if #available(iOS 13.0, *) {
            if viewControllerToPresent.modalPresentationStyle == .automatic || viewControllerToPresent.modalPresentationStyle == .pageSheet {
                viewControllerToPresent.modalPresentationStyle = .fullScreen
            }
        }

        self.swizzled_presentstyle(viewControllerToPresent, animated: animated, completion: completion)
    }

     static func setPresentationStyle_fullScreen() {

        let instance: UIViewController = UIViewController()
        let aClass: AnyClass! = object_getClass(instance)

        let originalSelector = #selector(UIViewController.present(_:animated:completion:))
        let swizzledSelector = #selector(UIViewController.swizzled_presentstyle(_:animated:completion:))

        let originalMethod = class_getInstanceMethod(aClass, originalSelector)
        let swizzledMethod = class_getInstanceMethod(aClass, swizzledSelector)
        if let originalMethod = originalMethod, let swizzledMethod = swizzledMethod {
        method_exchangeImplementations(originalMethod, swizzledMethod)
        }
    }
}

অ্যাপ্লিকেশনগুলিতে এবং অ্যাপ্লিকেশনটিতে: ফিনিশল্যাঞ্চিং উইথঅ্যাপশনস: সুইজলিং কোডটি কল করে কল করুন:

UIViewController.setPresentationStyle_fullScreen()

1

এটি আমার পক্ষে কাজ করেছে:

আপনার ভিউকন্ট্রোলআর.মডালপ্রেজেন্টেশন স্টাইল = ইউআইএমডালপ্রেজেন্টেশন স্টাইল.ফুলস্ক্রিন


3
এটি অন্যান্য বিদ্যমান উত্তরগুলিতে কিছুই যোগ করে না।
rmaddy

1

ইউআইভিউকন্ট্রোলারের জন্য একটি বিভাগ তৈরি করুন (বলুন ইউআইভিউকন্ট্রোলার + উপস্থাপনাটি স্টাইল)। এটিতে নিম্নলিখিত কোড যুক্ত করুন।

 -(UIModalPresentationStyle)modalPresentationStyle{
     return UIModalPresentationStyleFullScreen;
}

এটি ইউআইসন্ধানকন্ট্রোলারকে ভেঙে ফেলবে + দুর্ঘটনাকবলিত দুর্ঘটনার জন্য কিছুটা শক্ত করে
তোলে

@dklt এটি একটি দুর্দান্ত পর্যবেক্ষণ। সুতরাং সম্পত্তি স্পষ্টভাবে সেট করা সমস্যার সমাধান করবে। যদি ইউআইএস সার্চ কন্ট্রোলার ব্যবহার করে থাকে তবে এর থেকে সহজ সমাধানগুলি নেই।
গোবিন্দ

0

বিকল্প অ্যাপ্লিকেশনটিতে আপনার নিজস্ব বেস ভিউকন্ট্রোলার উপাদান থাকা এবং কেবলমাত্র একটি বেসিক সেটআপ সহ মনোনীত এবং প্রয়োজনীয় ইনিশিয়ালাইজারগুলি বাস্তবায়ন করা নিম্নলিখিত বিকল্পগুলির মতো:

class MyBaseViewController: UIViewController {

//MARK: Initialisers

/// Alternative initializer which allows you to set the modal presentation syle
/// - Parameter modalStyle: the presentation style to be used
init(with modalStyle:UIModalPresentationStyle) {
    super.init(nibName: nil, bundle: nil)
    self.setup(modalStyle: modalStyle)
}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    // default modal presentation style as fullscreen
    self.setup(modalStyle: .fullScreen)
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
    // default modal presentation style as fullscreen
    self.setup(modalStyle: .fullScreen)
}

//MARK: Private

/// Setup the view
///
/// - Parameter modalStyle: indicates which modal presentation style to be used
/// - Parameter modalPresentation: default true, it prevent modally presented view to be dismissible with the default swipe gesture
private func setup(modalStyle:UIModalPresentationStyle, modalPresentation:Bool = true){
    if #available(iOS 13, *) {
        self.modalPresentationStyle = modalStyle
        self.isModalInPresentation = modalPresentation
    }
}

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

আইওএস 13.1 এবং আইওএস 12.4 এ এক্সকোড 11.1 এ পরীক্ষিত

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


0

পূর্ণস্ক্রিনটি আর উপস্থাপন না করে এমন কোনও ভিডিও নিয়ে আমার এই সমস্যা ছিল। এই রেখাটি যুক্ত করা হয়েছে, যা দিনটি সংরক্ষণ করেছে :-)

videoController.modalPresentationStyle = UIModalPresentationFullScreen;

2
এটি অন্যান্য বিদ্যমান উত্তরগুলিতে কিছুই যোগ করে না।
rmaddy

0

সবচেয়ে সহজ সমাধান যা আমার পক্ষে কাজ করেছিল।

viewController.modalPresentationStyle = .fullScreen

3
এটি অন্যান্য বিদ্যমান উত্তরগুলিতে কিছুই যোগ করে না।
rmaddy

0

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

let vc = UIViewController()
let navController = UINavigationController(rootViewController: vc)
navController.modalPresentationStyle = .fullScreen

0
class MyViewController: UIViewController {

    convenience init() {
        self.init(nibName:nil, bundle:nil)
        self.modalPresentationStyle = .fullScreen
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

self.modalPresentationStyle = .fullScreenপ্রতিটি ভিউ কন্ট্রোলারের কল করার পরিবর্তে আপনি ইউআইভিউকন্ট্রোলারকে সাবক্লাস করতে পারেন এবং কেবল যে কোনও MyViewControllerজায়গায় ব্যবহার করতে পারেন ।


-1

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

# 1 একটি ইউআইভিউ এক্সটেনশন তৈরি করেছে

# 2 একটি পদ্ধতি তৈরি করেছেন ()

//#1
extension UIViewController {

//#2
func presentLocal(_ viewControllerToPresent: UIViewController, animated flag: 
Bool, completion: (() -> Void)? = nil) {

//Reusing below 2 lines :-)
viewControllerToPresent.modalPresentationStyle = .overCurrentContext
self.present(viewControllerToPresent, animated: flag, completion: completion)

  }
}

নীচে হিসাবে চালাচ্ছি

let vc = MyViewController()
let nc = UINavigationController(rootViewController: vc)
sourceView.presentLocal(nc, animated: true, completion: nil)

অথবা

let vc = MyViewController()
sourceView.presentLocal(vc, animated: true, completion: nil)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.