IOS7 এ স্বয়ংক্রিয়ভাবে অ্যাডজাস্টসক্রোলভিউ ইনসেটস, এক্সটেনডড লেআউটআইঙ্ক্লিউডস ওপাকবারস, এজসেজএক্সটেন্ডড লেআউটের মধ্যে পার্থক্য ব্যাখ্যা করা হচ্ছে


250

আমি iOS7 ইউআই রূপান্তর সম্পর্কে প্রচুর পড়ছি।

আমি এই কি তিন বৈশিষ্ট্য পেতে সক্ষম নই automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgesForExtendedLayout??

উদাহরণস্বরূপ আমি আমার ভিউ নিয়ন্ত্রণকারীদের স্ট্যাটাস বারের নীচে শুরু করার চেষ্টা করছি তবে আমি এটি অর্জন করতে সক্ষম নই am


5
এবং আপনি কেন ভাবেন যে আমি এটি পড়িনি? সমস্যাটি হ'ল প্রত্যাশার মতো কাজ করছে না যা আমি ভাল করে বুঝতে পারিনি !! .. কারণটি বলে
ব্যবহারকারী 1010819

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

8
আপনার ভিউডিডলড পদ্ধতিতে, যদি যোগ করুন ([স্ব-প্রতিক্রিয়াশক্তি নির্বাচন করুন: @ নির্বাচনকারী (এজগুলি ফরেক্সেন্ডলয়েট))) স্ব.ডেজেসফোরএক্সটেন্ডলয়েআউট = ইউআইআরেক্টইডজোন; যা আপনার দর্শন স্থিতি দণ্ডের নীচে শুরু করতে বাধ্য করবে।
নন্ধা

উত্তর:


629

আইওএস 7-এ শুরু হয়ে ভিউ কন্ট্রোলাররা ডিফল্টরূপে পূর্ণ-স্ক্রীন বিন্যাস ব্যবহার করে। একই সাথে, এটি কীভাবে এর দৃষ্টিভঙ্গি দেয় এবং তার উপরে এই বৈশিষ্ট্যগুলি সম্পন্ন হয় তার উপর আপনার আরও নিয়ন্ত্রণ থাকে:

edgesForExtendedLayout

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

এটি একটি উদাহরণ সহ দেখুন:

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

এখানে আপনি এর মান নির্ধারণ করছেন না edgesForExtendedLayout, তাই ডিফল্ট মানটি নেওয়া হয় ( UIRectEdgeAll), সুতরাং দৃশ্যটি পুরো স্ক্রীনটি পূরণ করার জন্য এর বিন্যাসটিকে প্রসারিত করে।

এটি ফলাফল:

প্রসারিত বিন্যাসের জন্য প্রান্ত ছাড়াই, দৃশ্যটি পুরো স্ক্রীনটি পূরণ করে

আপনি দেখতে পাচ্ছেন, লাল পটভূমিটি নেভিগেশন বার এবং স্ট্যাটাস বারের পিছনে প্রসারিত।

এখন, আপনি সেই মানটি সেট করতে যাচ্ছেন UIRectEdgeNone, তাই আপনি পর্দাটি coverাকাতে ভিউ কন্ট্রোলারকে না দেখানোর জন্য বলছেন:

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

এবং ফলাফল:

প্রান্ত forExtendedLayout সেট সহ, দর্শনটি নেভিগেশনের নীচে


automaticallyAdjustsScrollViewInsets

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

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

এটি কখন সেট করা হবে:

টেবিলটি পুরো স্ক্রিনে স্ক্রোল করবে, তবে আংশিকভাবে আচ্ছাদিত শুরু হবে

এবং হ্যাঁ (ডিফল্টরূপে):

টেবিলটি পুরো স্ক্রিনে স্ক্রোল করে এবং নেভিগেশনের নীচে শুরু হয়

উভয় ক্ষেত্রে, সারণীটি নেভিগেশন বারের পিছনে স্ক্রোল করে, তবে দ্বিতীয় ক্ষেত্রে (হ্যাঁ) এটি নেভিগেশন বারের নীচে থেকে শুরু হবে।


extendedLayoutIncludesOpaqueBars

এই মানটি পূর্বেরগুলির সাথে কেবল একটি সংযোজন। ডিফল্টরূপে, এই পরামিতিটি NO তে সেট করা আছে। যদি স্ট্যাটাস বার অস্বচ্ছ হয়, মতামত এমনকি যদি আপনি এটা (আবরণ আপনার ভিউ প্রসারিত স্ট্যাটাস বার অন্তর্ভুক্ত করা বাড়ানো হবে না, edgesForExtendedLayoutকরতে UIRectEdgeAll)।

আপনি যদি মানটি হ্যাঁ সেট করে থাকেন, এটি দৃশ্যকে আবার স্ট্যাটাস বারের নীচে যেতে দেয়।

যদি কিছু পরিষ্কার না হয় তবে একটি মন্তব্য লিখুন এবং আমি তার উত্তর দেব।

ইউআইএসক্রোলভিউ কী ব্যবহার করবেন তা আইওএস কীভাবে জানতে পারে?

আইওএস আপনার ভিউকন্ট্রোলারের ভিউতে প্রথম সূক্ষ্ম ধারণাটি সূচক 0 তে ধরে রাখে এবং যদি এটির একটি সাবক্লাস থাকে UIScrollViewতবে এতে বর্ণিত বৈশিষ্ট্যগুলি প্রয়োগ করা হয়।

অবশ্যই, এর অর্থ এটি UITableViewControllerডিফল্টরূপে কাজ করে (যেহেতু UITableViewএটি প্রথম দৃষ্টিভঙ্গি)।


আমাদের এই বৈশিষ্ট্যগুলি কেবল তখনই সেট করতে হবে, যদি আমরা ডিফল্ট নেভিগেশন বার দেখাচ্ছে, এবং এটির নিজস্ব কাস্টমাইজড নেভিগেশন বার না, তাই না?
হেমাং

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

পুরো ভিউয়ের উপরে কেন একটি ছোট কালো রঙ আসে? সাহায্য করুন? : /
aZtraL-EnForceR

24
এই ব্যাখ্যাটি iOS 7 ইউআই ট্রানজিশন গাইডের চেয়ে অনেক ভাল better এটি কেবল গাইডটি প্রতিস্থাপন করা উচিত, যা আমার কাছে কোনও ধারণা রাখেনি।
স্যাম

2
আমি মনে করি এক্সটেন্ডেড লেআউটআইঙ্ক্লিউডস ওপাকবারগুলি হ্যাঁ, কোনও পরিবর্তে ডিফল্টরূপে হ্যাঁ উচিত। ভিউয়ের রং পরিবর্তন (ট্রান্সলুসেন্সী) লেআউটটিকে প্রভাবিত করবে না।
ভ্লাদিমার স্লাভেক

15

আপনি স্টোরিবোর্ডগুলি ব্যবহার করছেন কিনা তা নিশ্চিত নয়, তবে আপনার ভিউ কন্ট্রোলারগুলি স্ট্যাটাস বারের নীচে (এবং নীচের বারের উপরে) শুরু করতে:

আইবিতে ভিউ কন্ট্রোলার নির্বাচন করুন, গুণাবলী পরিদর্শকতে 'প্রসারিত প্রান্ত - শীর্ষ বারের আন্ডার' এবং 'প্রসারিত প্রান্ত - নীচে নীচে বার' নির্বাচন করুন se


ঠিক আছে. তারপরে আমি মনে করি যে উপরে নন্দা যা প্রস্তাব করেছিলেন তা প্রোগ্রামিকভাবে একই ফলাফল অর্জন করবে। এটি যদি ভিডিডিএলডের অধীনে কাজ না করে তবে এটি দেখার জন্য ডিডলয়আউটসুভিউগুলিতে স্থানান্তরিত হতে পারে।
আলী বিডল

প্রসারিত বিন্যাসে অস্বচ্ছ বারগুলি অন্তর্ভুক্ত কিনা তা নির্দেশ করে। @ প্রপার্টি (ননোটমিক, অ্যাসাইন) BOOL এক্সটেন্ডড লেআউটআইঙ্ক্লিউডস ওপাকবারস আলোচনা ডিফল্ট মান নেই।
আবদুল ইয়াসিন

+1, আপনি আমাকে স্টোরিবোর্ডে চেক করার ইঙ্গিত দিয়েছিলেন। এবং আমি আমার সমস্যার অর্ধেক সমাধান করেছি।
সেলভা

10

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

import Foundation
import UIKit

// This ViewController is connected to a view on a storyboard that 
// has a scrolling sub view.
class TheViewController: UIViewController {

  // Prepares the view prior to loading.  Putting it in viewDidAppear didn't work.
  override func viewWillAppear(animated: Bool) {

    // this method is an extension of the UIViewController 
    // so using self works as you might expect.
    self.automaticallyAdjustsScrollViewInsets = false

    // Default is "true" so this sets it to false tells it to use 
    // the storyboard as you have it placed
    // and not how it thinks it should place it.
  }

}

আমার সমস্যা: স্টোরিবোর্ড ডিজাইন এবং সিমুলেটারের মধ্যে পার্থক্য সৃষ্টি করে ডিফল্টরূপে স্বয়ংক্রিয়ভাবে সেট হয়ে যায় স্টোরিবোর্ড ডিজাইন এবং সিমুলেটারের মধ্যে পার্থক্য সৃষ্টি করে ডিফল্টরূপে স্বয়ংক্রিয়ভাবে সেট করা সত্য হয়ে যায়

সমাধান করা হয়েছে: উপরের কোড প্রয়োগ করা হয়েছে, স্বতঃ-সমন্বয় বন্ধ করে দেওয়া হয়েছে। উপরের কোড প্রয়োগ করা হয়েছে, স্বয়ংক্রিয়-সমন্বয় বন্ধ করে দেওয়া হয়েছে।


5
যদি আপনি স্বয়ংক্রিয়ভাবে অ্যাডজাস্টসক্রোলভিউআইনসেটগুলি হ্যাঁ হিসাবে চালু করেন তবে আপনার উপরের সীমাটি শীর্ষগুইডলয়েট না করে তদারকির জন্য সেট করা উচিত।
xmkevinchen

5

আমি এই লাইনটি যুক্ত করে এই সমস্যার সমাধান করেছি, তবে আমার সমস্যাটি একটি সম্পর্কিত UIViewনয়, সম্পর্কিতUIScrollView

self.navigationController.navigationBar.translucent = NO;

2

কেবল মনে মনে জেনে রাখুন যে automaticallyAdjustsScrollViewInsets কোনও ধরণের স্ক্রোল ভিউ (সারণী দর্শন, সংগ্রহের দৃশ্য, ...) হয় তবেই সম্পত্তি কাজ করে

  • ভিসির ভিউ, বা
  • এই দৃশ্যের প্রথম সাবভিউ

অন্যান্য পরামর্শ দিয়েছেন, এটি প্রথম সাবউভি হলেও এটি কাজ করে তবে ভিউ হায়ারার্কিতে অন্যান্য স্ক্রোল মতামত রয়েছে।

সম্পাদনা (এক্সটেনশন ডিওয়াই)

আপনি যদি এই শর্তগুলি পূরণ করতে না পারেন এমনকী যদি আপনি অনুরূপ আচরণ চান (যেমন আপনার কাছে স্ক্রোল ভিউয়ের নীচে একটি পটভূমি চিত্র রয়েছে), আপনি ম্যানুয়ালি স্ক্রোল ভিউ ইনসেটগুলি সামঞ্জস্য করতে পারেন। তবে দয়া করে এটিকে 44 বা 64 বা 20 এর মতো ধীরে ধীরে সেট করবেন না যাতে অনেকে এসও এর চারপাশে পরামর্শ দেয়। আপনি কখনও আকার জানতে পারবেন না। Incall / gps / অডিও বিজ্ঞপ্তি থাকতে পারে, নেভিগেশন বার সর্বদা 44 pts থাকতে হবে না etc.

আমি মনে করি ডায়লআউটআউটসুভিউগুলিতে lengthলেআউটগাইড ব্যবহার করা সবচেয়ে ভাল সমাধান :

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    scrollView.contentInset = UIEdgeInsets(top: topLayoutGuide.length, left: 0, bottom: 0, right: 0)
    scrollView.scrollIndicatorInsets = scrollView.contentInset
}

আপনি একইভাবে নীচে লেআউটগাইড ব্যবহার করতে পারেন।


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