কোনও দৃশ্য সরিয়ে ফেলা হলে সীমাবদ্ধতার সাথে কী ঘটে


109

আমার কাছে প্রশ্নটি সহজ তবে ডকুমেন্টেশনে আমি কোনও তথ্য খুঁজে পাইনি।

যখন ভিউ হায়ারার্কি (বা অন্য ভিউতে স্থানান্তরিত) থেকে সরানো হয় তখন বিন্যাস সীমাবদ্ধতার সাথে কী ঘটে?

উদাহরণস্বরূপ, আসুন Cসাবউভিউ সহ ধারক Aএবং B। ধারক Cকিছু বাধা ধারণ করে। তারপরে আমরা কল করি [A removeFromSuperview]। বাধা নিয়ে কী হয় A?

তারপর কি হবে যদি আমরা যোগ Aকরতে Cআবার?

উত্তর:


118

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

self.portraitConstraints = [NSMutableArray new];
for (NSLayoutConstraint *con in self.view.constraints) {
    if (con.firstItem == self.view1 || con.secondItem == self.view1) {
       [self.portraitConstraints addObject:con];
    }
}

7
এই তথ্যটি ডকুমেন্টেশনের কোথাও পাওয়া যাবে? আমি আপনাকে বিশ্বাস করি কিন্তু এটি আশ্চর্যজনক বলে মনে হয় যে সত্যটি কোথাও উল্লেখ নেই।
সুলতান

2
এটি সাধারণ জ্ঞান যে সত্যিই দৃশ্যের পাশাপাশি প্রতিবন্ধকতাগুলি সরানো হয়। যদি তারা না থাকে তবে কীভাবে লেআউট সিস্টেম ভবিষ্যতের পাসে তাদের মূল্যায়ন করতে সক্ষম হত?
মাইক পোলার্ড

6
এই উত্তরটি যতটা সুস্পষ্ট বলে মনে হবে ঠিক ততটুকু এখনও এটি সহায়ক ছিল!
রেস_সকাল

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

4
@ ফিরো, আমি নিশ্চিত যে এগুলি অপসারণ করার কথা, সুতরাং তারা যদি আইওএস 6 এ না থাকে তবে এটি সম্ভবত একটি বাগ। বিটিডব্লিউ, অপসারণের ফর্মসুপেরভিউ পদ্ধতির ডকটি বলেছেন, "এই পদ্ধতিটি কল করার ফলে আপনি যে ভিউটি সরিয়ে ফেলছেন তার উল্লেখ রয়েছে বা আপনি যে অপসারণ করছেন তার সাবট্রির কোনও দৃশ্যের উল্লেখ আছে" বাধা সরিয়ে দেয় "।
rdelmar

41

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

ডকুমেন্টেশন UIView removeFromSuperview পদ্ধতি রাজ্যের জন্য:

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

আমি নিশ্চিত না যে এই প্রশ্নটি যখন গত বছর মূল প্রশ্নটি পোস্ট করা হয়েছিল তখন নথিভুক্ত হয়েছিল কিনা, তবে আমি কেবল ভেবেছিলাম যে কারওর প্রয়োজন হলে আমি এই তথ্যটি ভাগ করে নিই ...



3

তবে সচেতন থাকুন, যদি আপনার দুটি স্বতন্ত্র পিতা বা মতের দৃষ্টিভঙ্গি A এবং B, এবং একটি সাবভিউ সি থাকে, যেখানে সি বর্তমানে যথাযথ সীমাবদ্ধতার সাথে A এর একটি সংক্ষিপ্তসার, যে [বি অ্যাডসুভিউ: সি] কল করলেও এ সম্পর্কিত কোনও বাধা মুছে ফেলবে না এবং সি এবং অটো লেআউটগুলি ব্যতিক্রম ছুঁড়তে শুরু করবে, কারণ সেই সীমাবদ্ধতাগুলি আর একই শ্রেণিবিন্যাসের দর্শনের সাথে সম্পর্কিত নয়।

আপনার বি থেকে সি যুক্ত করার আগে, প্রতিবন্ধকতাগুলি সরিয়ে ফেলার জন্য আপনাকে [সি অপসারণ থেকে ক্রমফর্মভিউ] কল করতে হবে B.

এটি ম্যাক ওএস এক্সে সত্য - আমি আইওএস পরীক্ষা করে দেখিনি


মজাদার! আপনি কোথায় এই তথ্য পেয়েছেন? অ্যাডসউবভিউয়ের জন্য দস্তাবেজগুলি এই আচরণের উল্লেখ করে না। আমি জিজ্ঞাসা করছি কারণ বর্তমানে আমার কাছে একটি ছড়িয়ে ছিটিয়ে থাকা ব্যতিক্রম রয়েছে, যখন একটি ভিউ কন্ট্রোলার অপসারণ করার সময়, এতে বলা হয় যে 'দৃষ্টিভঙ্গিতে সীমাবদ্ধতা ইনস্টল করতে অক্ষম' - এমন কিছু যা আমি করছি না।
জিমিবি

2

আপনি যখন থাকবেন তখন সীমাবদ্ধতাগুলিও সরিয়ে দেওয়া হবে [A removeFromSuperview]

এগুলি ভুলে যাওয়া এবং আবার এ সি যুক্ত করা কোনও বাধা যুক্ত করে না।


0

সেগুলিও সরানো হয়েছে, আপনি একটি সাধারণ পরীক্ষা করতে পারেন। একটি দর্শন বাছাই করুন এবং এমন সুপারিউইজ তৈরি করুন যা তার সুপারভিউ রাইজাইজিং (সুপারভিউ প্রান্তগুলিতে সংযুক্ত হওয়ার মতো) অনুসরণ করতে বাধা দেয় SUBVIEW। এটি করার জন্য আপনি এই কনটেনারভিউতে সাবউইউকে একটি সংক্ষিপ্তসার হিসাবে যুক্ত করুন এবং সীমাবদ্ধতার মতো কিছু যুক্ত করুন:
ভি: |
এইচ: | - [SUBVIEW] - |
এই প্রতিবন্ধকতাগুলি SUBVIEW তত্ত্বাবধানে যুক্ত করা উচিত, সুতরাং CONTAINERVIEW।
আপনি কেবলমাত্র সমস্ত কনট্রিয়রভিউ সীমাবদ্ধতাগুলি পরীক্ষা করে সাবউবউজটি সরিয়ে ফেললে আপনি দেখতে পাবেন যে দুটি এখন আর নেই।


0

এই প্রশ্নটি ইন্টারফেস বিল্ডার দ্বারা প্রমাণিতও হতে পারে। অ্যাড সীমাবদ্ধতার UIViewউপর যখন টেনে আনুন এবং ছাড়ুন ViewControllerতখন UIViewনীল সীমাবদ্ধতাগুলি অদৃশ্য হয়ে যেতে পারবেন।


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