আইওএস 7: ইউটিআইটিভিউ স্ট্যাটাস বারের অধীনে শো shows


219

আমার অ্যাপ্লিকেশনটির প্রথম স্ক্রিনটি UITableViewControllerএকটি নেভিগেশন বার ছাড়াই, যার অর্থ সামগ্রীটি স্ট্যাটাস বারের নীচে প্রবাহিত হয় সুতরাং অনেকগুলি পাঠ্যের সংঘর্ষ রয়েছে। আমি উভয় বৈশিষ্ট্য সমন্বয় করেছি Under top barsএবং Adjust scroll view insetsযা আসলে এটির অধীনে স্ক্রোল করা থেকে বিরত করে তবে টেবিলের দৃশ্যের শীর্ষে নীচে রাখার ব্যয়ে। আমি UITableViewফ্রেমটি 20 পিক্সেল দ্বারা অফসেটে সেট করার চেষ্টা করেছি , তবে এটি কার্যকর হবে বলে মনে হচ্ছে না এবং বর্তমানে অ্যাপ্লিকেশনটি আইওএস 6 এর সাথে সামঞ্জস্যপূর্ণ হওয়ার দরকার রয়েছে বলে আমি আইওএস 7 স্টোরিবোর্ডগুলিতে অটোলেআউট ব্যবহার করতে বাধ্য করতে পারি না শীর্ষ উচ্চতা গাইড। কেউ কি এমন কোনও সমাধান খুঁজে পেয়েছেন যা উভয় সংস্করণের জন্য কাজ করে?

আমি যে জিনিসগুলি চেষ্টা করেছি: সেট করা edgesForExtendedLayout, স্টোরিবোর্ডের মধ্যে সেটিংস পরিবর্তন করা Under top barsএবং Adjust scroll viewফ্রেমটিকে একটি নতুন অঞ্চলে জোর করে।

একটি ছবি হাজার শব্দের সমান: স্ট্যাটাস বারের অধীনে প্রবাহ


2
আইওএস
on-এ

@ এরিকস: আমার ইতিমধ্যে UITableViewসেখানে একটি শিরোনাম রয়েছে, এটি স্ট্যাটাস বারের নীচে প্রবাহিত হয়।
নিকোলাস স্মিথ

আইওএস 6 এ অটো লেআউট গাইডটি ব্যবহার করবেন না কেন? এটা কাজ করে।
স্টিভেন ফিশার

উত্তর:


366

এটির প্রতিরূপ তৈরি করতে আগ্রহী যে কেউ, কেবল এই পদক্ষেপগুলি অনুসরণ করুন:

  1. একটি নতুন আইওএস প্রকল্প তৈরি করুন
  2. মূল স্টোরিবোর্ডটি খুলুন এবং ডিফল্ট / প্রাথমিকটি মুছুন UIViewController
  3. UITableViewControllerঅবজেক্ট লাইব্রেরি থেকে একটি নতুন টেনে আনুন
  4. এটিকে প্রাথমিক দেখার নিয়ামক হিসাবে সেট করুন
  5. টেবিলে কিছু পরীক্ষার ডেটা খাওয়ান

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

যেমন উপরের দৃশ্যে, নিম্নলিখিতগুলির কোনও প্রভাব থাকবে না :

// These do not work
self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;

এই সমস্যাটি খুব হতাশাব্যঞ্জক হতে পারে এবং আমি বিশ্বাস করি এটি অ্যাপলের শেষ প্রান্তে একটি বাগ, বিশেষত কারণ এটি তাদের নিজস্ব UITableViewControllerলাইব্রেরি থেকে পূর্ব-তারযুক্ত দেখায় ।

যারা "যাদু নাম্বার" উদাহরণস্বরূপ "20px এর একটি ব-দ্বীপ ব্যবহার করুন" ব্যবহার করে এটি সমাধানের চেষ্টা করছেন তাদের প্রত্যেকের সাথে আমি একমত নই। এই ধরণের দৃ tight়ভাবে মিলিত প্রোগ্রামিং অবশ্যই অ্যাপল আমাদের এখানে করতে চায় না not

আমি এই সমস্যার দুটি সমাধান আবিষ্কার করেছি:

  • UITableViewControllerদৃশ্যের সংরক্ষণ করা :
    আপনি যদি UITableViewControllerস্টোরিবোর্ডে ম্যানুয়ালি অন্য কোনও দৃশ্যে না রাখেন, তবে UITableViewControllerআপনি কোনও UINavigationController(সম্পাদক> এম্বেড ইন> নেভিগেশন কন্ট্রোলার) এ এম্বেড করে এবং পরিদর্শকের মধ্যে "শো নেভিগেশন বার" আনচেক করতে পারেন । এটি কোনও অতিরিক্ত টুইট করার প্রয়োজন ছাড়াই সমস্যাটি সমাধান করে এবং এটি UITableViewControllerস্টোরিবোর্ডে আপনার দৃশ্য সংরক্ষণ করে।

  • অটোলআউট ব্যবহার করে UITableViewএবং অন্য ভিউতে এম্বেড করা (আমি বিশ্বাস করি অ্যাপল আমাদের এটি কীভাবে করতে চায়) :
    একটি খালি তৈরি করুন UIViewControllerএবং এতে আপনার টানুন UITableView। তারপরে, আপনার থেকে UITableViewস্ট্যাটাস বারের দিকে টানুন Ctrl । স্ট্যাটাস বারের নীচে মাউসটি নামার সাথে সাথে আপনি একটি অটোলেআউট বুদবুদ দেখতে পাবেন যা "শীর্ষ বিন্যাস গাইড" বলেছে। মাউসটি ছেড়ে দিন এবং "উল্লম্ব ব্যবধান" নির্বাচন করুন। এটি লেআউট সিস্টেমটিকে স্ট্যাটাস বারের ঠিক নীচে রাখতে বলবে।

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


5
এফওয়াইআই, বিকল্প 1 (একটি এনএভি কন্ট্রোলারে এমবেডিং) এর ফলাফলের ফলে আপনি যখন টেবিলের মধ্য দিয়ে স্ক্রোল করবেন তখন আড়াআড়ি স্ট্যাটাসবারের পিছনে কক্ষগুলি দৃশ্যমান হবে।
RyanR

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

6
আমি যখন টেবিল ভিউ থেকে নিয়ন্ত্রণ-টেনে নিয়ে যাই, আমি কখনই স্ট্যাটাস বারে চলে না। দৃশ্যে কোনও দৃশ্যমান স্থিতি দণ্ড নেই, আপনি এখানে কী বোঝাতে চাইছেন তা নিশ্চিত নয় ...
জেসি

4
অপশন 2 এক্সকোডে আর কাজ করে না The বর্ণিত ক্রিয়া (সিটিআরএল-ড্রাগ) কখনই কাজ করা উচিত নয়, যেহেতু এটি আউটলেট সিস্টেমের মালিকানাধীন, তবে আপনি যদি বামদিকে দৃশ্যত গাছটিতে ম্যানুয়ালি টানেন, এমনকি শীর্ষ লেআউট গাইড কাজ করে না (এটা কি করা উচিত, AFAICT - আমি মনে করেন যে এই এখনো স্বয়ংক্রিয়-বহির্বিন্যাস মধ্যে আরেকটি প্রধান বাগ সংশোধন করা হয় :( :()
আদম

3
টেবিলভিউয়ের সাথে শিরোনামটি ব্যবহার করার সময় @ প্রাইডচুং এটিকে বোকা দেখায়, শীর্ষচিকাকে শীর্ষে স্থির থাকে এবং উপাদানগুলি পিছনে অদৃশ্য হয়ে যায় - এবং স্বচ্ছ স্ট্যাটাস বারের পিছনে ফিরে আসবে ...
আইএক্সএক্স ২

86

আপনি যদি অগ্রগতিমূলকভাবে কাজগুলি করে থাকেন এবং আপনার সেরা বাজি UITableViewControllerছাড়াই একটি ব্যবহার করছেন UINavigationControllerতবে নিম্নলিখিতটিগুলি করা viewDidLoad:

সুইফট 3

self.tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)

আগের সুইফট

self.tableView.contentInset = UIEdgeInsetsMake(20.0f, 0.0f, 0.0f, 0.0f);

UITableViewControllerএখনও স্ট্যাটাস বার পিছনে স্ক্রল হবে কিন্তু নীচে হবে না যখন শীর্ষে স্ক্রল।


1
আপনি ওএস সংস্করণ> for এর জন্য একটি চেক যোগ করতে পারেন এবং পুরানো ওএসকেও সমর্থন করতে পারেন (সেগুলির জন্য কোনও ইনসেট নেই)। অন্যথায় এটি আমার উদ্দেশ্যে ভাল কাজ করেছে।
সিম্পসফ অফ

8
হার্ডকোডিং উচ্চতার মানটি সেরা ধারণা নয়।
ম্যাকিয়েজ কোজিł

3
হ্যাঁ, topLayoutGuideপরিবর্তে দৈর্ঘ্য ব্যবহার করুন।
লিপকা

10
আমি UIApplication.sharedApplication.statusBarFrame.size.height20 এর পরিবর্তে ব্যবহার করব
মোজুবা

এটি আজকাল ইউআইএপ্লিকেশন.সারেড.স্ট্যাটাসবারফ্রেম.সাইজ.হাইটে আপডেট হয়েছে।
এ্যাসেটনিওপ

23

দয়া করে নোট করুন: এটি নিম্নলিখিত কনফিগারেশনের জন্য আমার পক্ষে কাজ করেছে:

  • স্ক্রিনের শীর্ষে কোনও নেভিগেশন বার নেই (সারণী দর্শন স্থিতি বারের সাথে মিলিত)
  • সারণী দর্শনটি অ-স্ক্রোলযোগ্য

উপরের দুটি প্রয়োজনীয়তা পূরণ না করা হলে আপনার মাইলেজ বিভিন্ন হতে পারে।

আসল পোস্ট

আমি আমার মতামতটি প্রোগ্রামিয়ালি তৈরি করেছি এবং এটি আমার পক্ষে কাজ করে:

- (void) viewDidLayoutSubviews {
    // only works for iOS 7+
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = self.topLayoutGuide.length;

        // snaps the view under the status bar (iOS 6 style)
        viewBounds.origin.y = topBarOffset * -1;

        // shrink the bounds of your view to compensate for the offset
        viewBounds.size.height = viewBounds.size.height + (topBarOffset * -1);
        self.view.bounds = viewBounds;
    }
}

উত্স ( pg.39 এর নীচে শীর্ষলআউটগাইড বিভাগে)।


আকর্ষণীয় ... আমি কোনও সমস্যা ছাড়াই আমার প্রজেক্টে এটির মতো কল করতে সক্ষম হয়েছি ... তবে আপনার চেয়ে আমার চেয়ে সহজ ভিউ লেআউট কাঠামো থাকতে পারে। আপনার পরামর্শটি সঠিক, আমি আমার উত্তরে সেই পরিবর্তন করব।
স্টাননার

আমি যখন আমার অ্যাপটি ঘোরালাম তখন সমস্যাটি জুড়ে আমি হোঁচট খেয়েছি। আপনি যদি ঘূর্ণন অক্ষম করে থাকেন তবে আপনার সম্ভবত সমস্যা নেই।
জেরেমি

আমার প্রকল্পে আমার ঘূর্ণন সক্ষম হয়নি এবং আমি সমস্যাটি পেরিয়ে এসেছি, তবে হ্যাঁ, এখনও একটি ভাল বিষয়।
স্টাননার

1
যে কেউ নিজের কনটেইনার নিয়ামক প্রয়োগ করছে তার পক্ষে স্থিতি বা নেভিগেশন বারের আন্ডারল্যাপিংয়ের জন্য সামঞ্জস্য করার সঠিক উপায়!
রাফায়েল নোব্রে

আপনি যদি উত্সটি পরিবর্তন করেন তবে দেখার সীমাটির উচ্চতাটি না, তবে আপনি যে পরিমাণটি উত্সটি পরিবর্তন করেছেন তার দ্বারা পর্দার নীচের প্রান্তটি দিয়ে নীচেটি কাটা যাবে না? (সুতরাং পিক্সেলের শেষ কয়েক সারিটি দেখতে পাওয়া অসম্ভব হয়ে পড়ে)
টেনফোর04

20

শীর্ষ উত্তরে যুক্ত করা:

দ্বিতীয় পদ্ধতিটি প্রাথমিকভাবে কাজ করার পরে মনে হচ্ছে না আমি কিছু অতিরিক্ত টিঙ্কারিং করেছি এবং সমাধানটি পেয়েছি।

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


  1. স্টোরিবোর্ডে একটি ফাঁকা ভিউকন্ট্রোলার টেনে আনুন। নিয়ামক দেখুন

  2. একটি ইউআইটিএবলভিউ অবজেক্টটি ভিউতে টানুন । (ইউআইটিএবল ভিউ কনট্রোলার নয়)। নীল বিন্যাসের গাইডগুলি ব্যবহার করে একে একে একে একে একে একে একে একে একে একে একে একে ঠিক ঠিক মাঝখানে center

টেবিল দেখুন কেন্দ্রের চিত্র

  1. টেবিলভিউতে একটি ইউআইটিএবলভিউসেল টেনে আনুন। এটি আপনার প্রোটোটাইপ পুনরায় ব্যবহারের ঘর হবে, সুতরাং এট্রিবিউটস ট্যাবের অধীনে এটি পুনরায় ব্যবহারকারীর সেট করতে ভুলবেন না অথবা আপনি ক্র্যাশ পাবেন।

টেবিল ভিউ সেল যুক্ত করুন আইডেন্টিফায়ার পুনরায় ব্যবহার করুন

  1. আপনার ইউআইভিউউকন্ট্রোলারের কাস্টম সাবক্লাস তৈরি করুন এবং <UITableViewDataSource, UITableViewDelegate>প্রোটোকল যুক্ত করুন। আপনার স্টোরিবোর্ডের ভিউকন্ট্রোলারটিকে সনাক্তকরণ পরিদর্শকটিতে এই শ্রেণিতে সেট করতে ভুলবেন না।

  2. আপনার বাস্তবায়ন ফাইলে আপনার টেবিলভিউয়ের জন্য একটি আউটলেট তৈরি করুন এবং এটি "টেবিলভিউ" নাম দিন

আউটলেট তৈরি করুন tableView

  1. টেবিলভিউতে ডান ক্লিক করুন এবং ডেটাসোর্স এবং আপনার ভিউকন্ট্রোলারের প্রতিনিধি উভয়কে টেনে আনুন।

ডেটাসোর্স প্রতিনিধি

এখন স্ট্যাটাস বারে ক্লিপ না দেওয়ার অংশটির জন্য।

  1. আপনার সারণী দর্শনটির শীর্ষ প্রান্তটি ধরুন এবং এটিকে শীর্ষের নিকটে থাকা ড্যাশড নীল অটো-লেআউট গাইডগুলির মধ্যে একটিতে নামান

পুনরায় আকার দেওয়ার

  1. এখন, আপনি টেবিল ভিউ থেকে শীর্ষে টানুন নিয়ন্ত্রণ করতে পারেন এবং শীর্ষ স্থান থেকে শীর্ষ বিন্যাস গাইড নির্বাচন করতে পারেন

শীর্ষ স্থান থেকে শীর্ষ বিন্যাস গাইড

  1. এটি আপনাকে টেবিলভিউয়ের অস্পষ্ট লেআউট সম্পর্কে একটি ত্রুটি দেবে, কেবলমাত্র মিসিং সীমাবদ্ধতা এবং আপনার সম্পন্ন করে।

অনুপস্থিত সীমাবদ্ধতা যুক্ত করুন

এখন আপনি আপনার টেবিল ভিউটি স্বাভাবিকের মতো সেট আপ করতে পারেন এবং এটি স্ট্যাটাস বারটি ক্লিপ করবে না!


11
- (void) viewDidLayoutSubviews {
    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
        if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
            self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = self.topLayoutGuide.length;
        viewBounds.origin.y = topBarOffset * -1;
        self.view.bounds = viewBounds;
        self.navigationController.navigationBar.translucent = NO;
    }
}

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/SupportingEarlieriOS.html#//apple_ref/doc/uid/TP40013174-CH14-SW1


2
<= to> স্যুইচ করুন এবং ব্লক হলে
খালিটি

1
self.topLayoutGuide.lengthএখান থেকে পড়া viewDidLayoutSubviewsশিশুদের দর্শনগুলির বিন্যাসটি স্ক্রু করবে।

আপনার বর্ণনা অনুসারে এটি করার সময় @ ওলজেজ, স্ব.ট্যাটিভ্যু ভিউ স্ক্রোল করতে পারে না।
ডনসং

8

আপনার স্টোরিবোর্ডে ইউআইভিউকন্ট্রোলার নির্বাচন করুন একটি আনচেক বিকল্প শীর্ষ বারের নীচে প্রান্তগুলি প্রসারিত করুন। আমার জন্য কাজ করেছেন। :)


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

আমার জন্য একমাত্র সমাধান যা কাজ করে। (দ্রষ্টব্য আপনি আইবিতে স্ট্যাটাস বারের নীচে সারণী দর্শনটি "সংক্ষেপিত" করতে হবে এবং সীমাবদ্ধতাগুলি আপডেট করুন)।
মার্টিন ম্যাকারস্কি

ইউআইটিএবল ভিউকন্ট্রোলারের সাথে এক্সকোড 8 এ আমার জন্য কাজ করেছেন।
এডুয়ার্ড বার্বিয়ার

8

এটি "সুইফ্ট" এ কীভাবে লিখতে হবে @ লিপকার উত্তরের একটি সমন্বয়:

tableView.contentInset = UIEdgeInsetsMake(20.0, 0.0, 0.0, 0.0)

এখানে সুইফ্টের অনুমতি নেই?
uplearnedu.com

কেবলমাত্র সমাধান যা আমার পক্ষে কাজ করেছে, এটি আমাকে একটি ইউআইআইআইউইউ কনট্রোলার তৈরি করতে দেয় না
শেরিফ মারজুক

1
এটি আদর্শের চেয়ে কম কারণ এটি 20 এ শীর্ষ পর্বতমালা রাখে এমনকি এমন ল্যান্ডস্কেপে যেখানে
আইওএস

এই প্রকরণটি আমার জন্য কোনও কনফিগারেশন ভালভাবে পরিচালনা করে:- (void)viewDidLayoutSubviews { if (self.tableView.contentInset.top != self.topLayoutGuide.length) { self.tableView.contentInset = UIEdgeInsetsMake(self.topLayoutGuide.length, 0.0, 0.0, 0.0); } }
কিউইক্স

5

এক্সকোড 7 এর জন্য, নেভিগেশন বারের জন্য 'ট্রান্সলুসেন্ট' চেক চিহ্নটি টিক চিহ্ন দেওয়া আমার পক্ষে কাজ করেছে।

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


সবচেয়ে সহজ, দ্রুততম, সহজতম, নিরাপদ? সমাধান। অন্য কিছুর তুলনায় কেন এর এত কম উত্সাহ রয়েছে তা জানেন না।
গ্রানটেকস

3

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

class MyTableViewController: UITableViewController {

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

    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
        coordinator.animateAlongsideTransition({ (context) -> Void in
            }, completion: { (context) -> Void in
                self.configureTableViewTop()
        })
    }

    func configureTableViewTop() { 
        tableView.contentInset.top = UIApplication.sharedApplication().statusBarFrame.height
    }
}

2

কোশার কেমন তা আমি জানি না তবে আমি দেখতে পেলাম যে এই স্কিমটি ভিউকন্ট্রোলারের দৃষ্টিভঙ্গিটিকে নীচে নামিয়েছে এবং একটি দৃ background় পটভূমির সাথে স্থিতি দণ্ড সরবরাহ করে:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Shove everything down if iOS 7 or later
    float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (systemVersion >= 7.0f) {

        // Move the view down 20 pixels
        CGRect bounds = self.view.bounds;
        bounds.origin.y -= 20.0;
        [self.view setBounds:bounds];

        // Create a solid color background for the status bar
        CGRect statusFrame = CGRectMake(0.0, -20.0, bounds.size.width, 20);
        UIView* statusBar = [[UIView alloc] initWithFrame:statusFrame];
        statusBar.backgroundColor = [UIColor redColor];
        [self.view addSubview:statusBar];
    }

অবশ্যই, redColorআপনি পটভূমির জন্য যা রঙ চান তা প্রতিস্থাপন করুন ।

স্ট্যাটাস বারে বর্ণগুলি / চিহ্নগুলির রঙ সেট করতে আপনাকে আলাদা আলাদা আলাদা আলাদা সুইজল করতে হবে। বিশ্বব্যাপী এটি করার জন্য আমি View controller-based status bar appearance = NOএবং Status bar style = Opaque black styleপ্লাস্টে ব্যবহার করি ।

কাজ মনে হচ্ছে এবং আমি এটির সাথে কোনও বাগ বা সমস্যা শুনতে আগ্রহী।


2

চ্যাপজিসির উত্তর এক্সআইবি নিয়ে কাজ করার সময় দুর্দান্ত কাজ করে।

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

এটা এখানে:

UIViewController *containerLeftViewController = [[UIViewController alloc] init];
UITableViewController *tableViewController = [[UITableViewController alloc] init];

containerLeftViewController.view.backgroundColor = [UIColor redColor];

hostsAndMoreTableViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
[containerLeftViewController.view addSubview:tableViewController.view];

[containerLeftViewController addChildViewController:tableViewController];
[tableViewController didMoveToParentViewController:containerLeftViewController];

NSDictionary * viewsDict = @{ @"tableView": tableViewController.view ,
                              @"topGuide": containerLeftViewController.topLayoutGuide,
                              @"bottomGuide": containerLeftViewController.bottomLayoutGuide,
                              };
[containerLeftViewController.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[tableView]|"
                                                                                         options:0
                                                                                         metrics:nil
                                                                                           views:viewsDict]];
[containerLeftViewController.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topGuide][tableView][bottomGuide]"
                                                                                         options:0
                                                                                         metrics:nil
                                                                                           views:viewsDict]];

চিয়ার্স, বেন


1

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


1

আমি কাঙ্ক্ষিত ব্যাকগ্রাউন্ড সহ একটি অতিরিক্ত ভিউ ব্যবহার করে শেষ করেছি, টেবিলভিউয়ের পরে যুক্ত এবং স্থিতি বারের নীচে রাখলাম:

    self.CoverView = [[UIView alloc]init];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {

    self.CoverView.frame = CGRectMake(0,0,self.view.bounds.size.width,20);
    }

    self.CoverView.backgroundColor = [UIColor whiteColor];
    self.TableView = [[UITableView alloc]initWithFrame:CGRectMake(0,
    self.CoverView.bounds.size.height,XXX, YYY)];
    [self.view addSubview:self.TableView];
    [self.view addSubview:self.CoverView];

এটি খুব সুন্দর নয়, তবে এটি কেবল সহজ সমাধান, যদি আপনার xib- কম ভিউগুলি এবং আইওএস 6 এবং আইওএস 7 উভয়ই কাজ করা প্রয়োজন


1

আমি রেটিনা / নন-রেটিনা ডিসপ্লে হিসাবে এটি করেছি

BOOL isRetina = FALSE;

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    if ([[UIScreen mainScreen] scale] == 2.0) {
        isRetina = TRUE;
    } else {
        isRetina = FALSE;
    }
}

if (isRetina) {
    self.edgesForExtendedLayout=UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars=NO;
    self.automaticallyAdjustsScrollViewInsets=NO;
}

1

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

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [super traitCollectionDidChange:previousTraitCollection];
    // Fix up content offset to ensure the tableview isn't underlapping the status bar.
    self.tableView.contentInset = UIEdgeInsetsMake(self.topLayoutGuide.length, 0.0, 0.0, 0.0);
}

1

সুইফ্ট 3-এর জন্য কাজ করে - ভিউডিডলডে ();

let statusBarHeight = UIApplication.shared.statusBarFrame.height

let insets = UIEdgeInsets(top: statusBarHeight, left: 0, bottom: 0, right: 0)
tableView.contentInset = insets
tableView.scrollIndicatorInsets = insets

এই কোড: 1. স্ট্যাটাস বারের উচ্চতা পায় 2. টেবিলের শীর্ষস্থানীয় স্থিতি বারের উচ্চতার সমান একটি সামগ্রী দেখায় set ৩. একই ইনসেটটি স্ক্রোল সূচক দেয়, সুতরাং এটি স্ট্যাটাস বারের নীচে প্রদর্শিত হয়।


1

আমার মত যারা বরং তাদের এম্বেড করবেন করবে UITableViewControllerএকটিUIViewController এই চেষ্টা:

একটি কাস্টম UITableViewControllerসাবক্লাসটি টেবিলভিউর তদারকিতে একটি মাস্ক ভিউ যুক্ত করতে পারে। ভিউডিডঅ্যাপারে মাস্ক যুক্ত করুন এবং ভিউইলডিস্পায়ারের মুখোশটি সরিয়ে দিন।

private var statusBarMaskView: UIView!

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    if let superview = self.tableView.superview {
        self.statusBarMaskView = UIView(frame: CGRect.zero)
        superview.insertSubview(self.statusBarMaskView, aboveSubview: self.tableView)
        self.statusBarMaskView.backgroundColor = self.tableView.backgroundColor

        // using a nice constraint layout library to set the frame
        self.statusBarMaskView.pinTop(to: superview)
        self.statusBarMaskView.pinLeft(to: superview)
        self.statusBarMaskView.pinRight(to: superview)
        self.statusBarMaskView.addHeightConstraint(with: 22.0)
        ////
    }
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    self.statusBarMaskView.removeFromSuperview()
    self.statusBarMaskView = nil
}

0

আমার ইউআইটিএবলভিউয়ের শীর্ষে আমার কাছে একটি ইউআইসন্ধানবার ছিল এবং নিম্নলিখিতটি কাজ করেছিল;

self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
self.tableView.contentOffset = CGPointMake(0, -20);

ভাগ করুন এবং উপভোগ করুন ...


0

আমি ফ্রিফর্মের আকার নির্ধারণ করে এটির কাজ পেয়েছি

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


2
"সিমুলেটেড মেট্রিক্স" শুধুমাত্র এক্সকোডে আপনার সৃষ্টি দেখার ক্ষেত্রে প্রযোজ্য, বাস্তবতার জন্য নয়। [দেখুন: স্ট্যাকওভারফ্লো.com
টাইলার এ।

0

আব্রাহামচেজের সমাধান https://developer.apple.com/library/ios/qa/qa1797/_index.html আমার জন্য নিম্নলিখিত হিসাবে কাজ করেছে। আমার আমার প্রাথমিক ভিউ হিসাবে একক ইউআইটিএবলভিউ কনট্রোলার ছিল। আমি অফসেট কোডটি এবং একটি নভকোনে এম্বেড করার চেষ্টা করেছি কিন্তু স্ট্যাটাসবারের স্বচ্ছতার সমাধানও করি নি।

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

পুরানো সারণী দর্শনটি নতুন নিয়ামকটিতে ভিউতে টানুন।

নতুন কন্ট্রোলারে টেবিলটি পুনঃনির্মাণের জন্য সমস্ত জিনিস করুন:

আপনার পুরানো ভিউ কন্ট্রোলার.আইএইচ ফাইলটি ইউআইটিএবল ভিউ কনট্রোলারের পরিবর্তে ইউআইভিউকন্ট্রোলার থেকে উত্তরাধিকারী / সাবক্লাসে পরিবর্তন করুন।

ইউআইটিএবলভিডাটা ডেটা সোর্স এবং ইউআইটিএবলভিডেলিগেটটি ভিউকন্ট্রোলারের .h এ যুক্ত করুন।

স্টোরিবোর্ডে প্রয়োজনীয় কিছু যেমন একটি অনুসন্ধানবার পুনরায় সংযুক্ত করুন।

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

তারপরে আমি উল্লম্ব স্থানের সীমাবদ্ধতা না পাওয়া এবং তার শীর্ষ মান -20 থেকে 0 এ পরিবর্তন না করা পর্যন্ত আমি সর্বত্র ক্লিক করেছি এবং এটি পুরোপুরি কার্যকরভাবে কাজ করেছে।


0

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

float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0f) {

    // Move the view down 20 pixels
    CGRect bounds = self.view.bounds;
    bounds.origin.y -= 20.0;
    [self.navigationController.view setBounds:bounds];

    // Create a solid color background for the status bar
    CGRect statusFrame = CGRectMake(0.0, -20.0, bounds.size.width, 20);
    UIView* statusBar = [[UIView alloc] initWithFrame:statusFrame];
    statusBar.backgroundColor = [UIColor whiteColor];
    [statusBar setAlpha:1.0f];
    [statusBar setOpaque:YES];
    [self.navigationController.view addSubview:statusBar];
}

এটি হট লিক্সের সমাধানের অনুরূপ তবে নেভিগেশনকন্ট্রোলারে সাবউভিউ প্রয়োগ করে।


আইওএস 8 এ এটিই আমার জন্য কাজ করেছে!
স্যামবি 26'15

0
override func viewDidLoad() {
 // your code

 if let nc = self.navigationController {
   yourView.frame.origin.y = nc.navigationBar.frame.origin.y + nc.navigationBar.frame.height
  }
}

0

এখানে একটি সুইফট ২.৩ রয়েছে। (এক্সকোড 8.0) সমাধান আমি ইউআইটিএবলভিউয়ের একটি সাবক্লাস তৈরি করেছি।

class MYCustomTableView: UITableView
{   
    override func drawRect(rect: CGRect) {
        super.drawRect(rect)
        contentInset    = UIEdgeInsetsZero
    }
}

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

আপনার আইবিতে টেবিলভিউ আপডেট করতে ভুলবেন না (আপনার ভিউকন্ট্রোলারের ভিতরে টেবিলভিউ নিয়ন্ত্রণকারী বা কেবল টেলভিউ)।


0

আইওএস 11 এ আমি এই সমস্যার মুখোমুখি হয়েছিল তবে আইওএস 8 - 10.3.3 এর জন্য লেআউটটি সঠিক ছিল। আমার ক্ষেত্রে আমি সুপারভিউ.টপের পরিবর্তে সুপারভিউ.টপ মার্জিনে একটি উল্লম্ব স্পেস সীমাবদ্ধতা সেট করেছি যা আইওএস 8 - 11 এর জন্য কাজ করে।

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


0

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

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


-1

সমস্ত সমাধান দেখুন: আমার প্রকল্পটি কেবল xib ব্যবহার করে, সুতরাং, স্টোরিবোর্ড সহ সমাধানটি আমার পক্ষে কাজ করে নি। self.edges ForExtendedLayout = UIRectEdgeNone; নেভিগেশনবার দৃশ্যমান হলে কেবল নিয়ন্ত্রণকারীর জন্য কাজ করে। তবে আপনার দৃষ্টিভঙ্গিটিতে যদি কেবল স্থিতি দণ্ড থাকে তবে তা কার্যকর হবে না। সুতরাং আমি দুটি কনডিটন একত্রিত।

- (void) viewDidLayoutSubviews {
float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0f) {
    CGRect bounds = self.view.bounds;
    if(self.navigationController == nil || self.navigationController.isNavigationBarHidden == YES){
        bounds.origin.y -= 20.0;
        [self.view setBounds:bounds];
    }
    else{
        self.edgesForExtendedLayout = UIRectEdgeNone;
    }
}

এই কাজ সাহায্য করুন।


-2

আপনার যদি আইওএস 6 সমর্থন করতে হয় তবে আপনাকে শর্তসাপেক্ষে এটি নামিয়ে ফেলতে হবে। এটি হ'ল, আইওএস 7-এ আপনার এটি কেবল 20 পয়েন্ট ( frameম্যানিপুলেশন বা অটো-লেআউট ব্যবহারের মাধ্যমে ) সরিয়ে নেওয়া উচিত এবং আইওএস 6 এ আপনি এটিকে একা রেখে যান। আমি বিশ্বাস করি না আপনি আইবিতে এটি করতে পারবেন, সুতরাং আপনাকে কোডে এটি করতে হবে।

সম্পাদনা

আপনি আইওএস-এ iOS6 / iOS7 ডেল্টাস ব্যবহার করে এটি করতে পারেন। আইওএস 7 এ আপনার অবস্থান নির্ধারণ করুন, তারপরে আইওএস 6 এর জন্য ব-দ্বীপে ব-দ্বীপ স্থাপন করুন। দেখুন এই তাই প্রশ্ন আরও তথ্যের জন্য।


দুর্ভাগ্যক্রমে ফ্রেমটি সেট করা এটি পরিবর্তন করে না।
নিকোলাস স্মিথ

এটি সম্পর্কে কি কাজ করে না? টেবিল ভিউ নীচে সরানো হয় না?
স্কট বেরেরোয়েটস

হ্যাঁ, এটি একই অবস্থানে থেকে যায়। আমি চেষ্টা করেছি self.view.frameএবং self.tableView.frame, উভয় viewWillAppearএবং viewDidLoad। নিরাপদ থাকতে আমি আবারও setContentNeedsDisplayএকটি পুনরায় অঙ্কন করতে বাধ্য করেছি।
নিকোলাস স্মিথ

স্বয়ংক্রিয় বিন্যাস সক্ষম করা আছে?
স্কট বেরেরোয়েটস

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