আমার একটি ইউআইভিউ রয়েছে যা স্ক্রিনে বেশ কয়েকটি প্রতিবন্ধকতার মধ্য দিয়ে রাখা হয়েছে। কিছু প্রতিবন্ধকতা সুপারভিউর মালিকানাধীন, অন্যরা অন্য পূর্বপুরুষের মালিকানাধীন (যেমন সম্ভবত কোনও ইউআইভিউকন্ট্রোলারের দেখার সম্পত্তি)।
আমি এই সমস্ত পুরানো বাধাগুলি সরিয়ে দিতে চাই এবং নতুন সীমাবদ্ধতা ব্যবহার করে এটি কোথাও নতুন স্থাপন করতে চাই।
প্রতিটি একক প্রতিবন্ধকতার জন্য আইবিআউটলেট তৈরি না করে এবং কোন দৃশ্যের মালিকানা কোন সীমাবদ্ধতার কথা মনে না রেখে আমি কীভাবে এটি করতে পারি?
বিস্তারিতভাবে বলতে গেলে নিখুঁত পদ্ধতির প্রতিবন্ধকতার জন্য প্রতিটি আইবিআউটলেটগুলি তৈরি করা হবে এবং তারপরে কোডিং কোড জড়িত যেমন:
[viewA removeConstraint:self.myViewsLeftConstraint];
[viewB removeConstraint:self.myViewsTopConstraint];
[viewB removeConstraint:self.myViewsBottomConstraint];
[self.view removeConstraint:self.myViewsRightConstraint];
এই কোডটির সাথে সমস্যাটি হ'ল এমনকি সহজতম ক্ষেত্রেও আমার 2 আইবিউটলেট তৈরি করা দরকার। জটিল লেআউটগুলির জন্য, এটি সহজেই 4 বা 8 প্রয়োজনীয় আইবিউটলেটগুলি পৌঁছে দিতে পারে। তদুপরি, আমার নিশ্চিত হওয়া দরকার যে সীমাবদ্ধতা অপসারণের জন্য আমার কলটি সঠিক দৃষ্টিভঙ্গিতে ডাকা হচ্ছে। উদাহরণস্বরূপ, কল্পনা করুন যে myViewsLeftConstraint
এটির মালিকানাধীন viewA
। যদি আমি দুর্ঘটনাক্রমে কল করতে পারি তবে [self.view removeConstraint:self.myViewsLeftConstraint]
কিছুই হবে না।
দ্রষ্টব্য: পদ্ধতিটি সীমাবদ্ধ করেআফেক্টিংলআউটআউটএক্সিস প্রতিশ্রুতিবদ্ধ দেখায়, তবে এটি কেবল ডিবাগিংয়ের উদ্দেশ্যে তৈরি।
আপডেট করুন: উত্তর আমি সঙ্গে চুক্তি গ্রহণ করছি অনেকেই self.constraints
, self.superview.constraints
, অথবা কিছু তাদের বৈকল্পিক। এই সমাধানগুলি কার্যকর হবে না কারণ এই পদ্ধতিগুলি কেবলমাত্র দৃষ্টিভঙ্গিকে প্রভাবিত করে না, কেবলমাত্র দৃশ্যের মালিকানার প্রতিবন্ধকতাগুলি ফিরিয়ে দেয়।
এই সমাধানগুলির সাহায্যে সমস্যাটি স্পষ্ট করতে এই মতামতটিকে শ্রেণিবিন্যাস বিবেচনা করুন:
- দাদা
- পিতা
- আমাকে
- পুত্র
- কন্যা
- ভাই
- আমাকে
- চাচা
- পিতা
এখন কল্পনা করুন আমরা নিম্নলিখিত সীমাবদ্ধতাগুলি তৈরি করি এবং সর্বদা তাদের নিকটতম সাধারণ পূর্বপুরুষের সাথে সংযুক্ত করি:
- C0: আমি: পুত্র হিসাবে একই শীর্ষ (আমার মালিকানাধীন)
- সি 1: আমি: প্রস্থ = 100 (আমার মালিকানাধীন)
- সি 2: মি: ভাইয়ের সমান উচ্চতা (পিতার মালিকানাধীন)
- সি 3: মি: আঙ্কেলের মতো একই শীর্ষে (দাদুর মালিকানাধীন)
- সি 4: মি: দাদুর সমান বাম (দাদার মালিকানাধীন)
- সি 5: ভাই: ফাদার হিসাবে একই বাম (পিতার মালিকানাধীন)
- সি:: চাচা: দাদুর সমান বাম (দাদার মালিকানাধীন)
- সি 7: পুত্র: কন্যার মতোই বাম (আমার মালিকানাধীন)
এখন কল্পনা করুন আমরা প্রভাবিত সমস্ত প্রতিবন্ধকতা মুছে ফেলতে চাই Me
। যে কোনও সঠিক সমাধান অপসারণ করা উচিত [C0,C1,C2,C3,C4]
এবং অন্য কিছু নয়।
যদি আমি ব্যবহার করি self.constraints
(যেখানে স্বয়ং আমার) তবে আমি তা পাব [C0,C1,C7]
, কারণ সেগুলি কেবল আমার মালিকানাধীন প্রতিবন্ধকতা। স্পষ্টতই এটি নিখোঁজ হওয়ায় এটি অপসারণ করার পক্ষে যথেষ্ট হবে না [C2,C3,C4]
। তদুপরি, এটি C7
অযথা অপসারণ করা হচ্ছে ।
যদি আমি ব্যবহার করি self.superview.constraints
(যেখানে স্বয়ং আমিই থাকি) তবে আমি [C2,C5]
পেতাম, যেহেতু সেগুলি পিতার মালিকানার সীমাবদ্ধতা। স্পষ্টতই আমরা এই C5
সমস্তগুলি অপসারণ করতে পারি না কারণ এটি সম্পূর্ণরূপে সম্পর্কিত নয় Me
।
আমি যদি ব্যবহার করি তবে আমি grandfather.constraints
পেয়ে যাব [C3,C4,C6]
। আবার, আমরা এগুলি সবগুলি অপসারণ করতে পারি না কারণ C6
অটুট থাকা উচিত।
নিষ্ঠুর বলের দৃষ্টিভঙ্গি হ'ল ভিউর পূর্বসূরীদের প্রত্যেককে (নিজেও অন্তর্ভুক্ত) লুপ করা, এবং দেখা নিজেই হয় firstItem
বা না secondItem
হয় তা দেখতে; যদি তা হয় তবে সেই সীমাবদ্ধতা সরিয়ে দিন। এটি সঠিক সমাধান, প্রত্যাবর্তন [C0,C1,C2,C3,C4]
এবং কেবলমাত্র সেই সীমাবদ্ধতার দিকে নিয়ে যাবে।
যাইহোক, আমি আশা করছি পূর্বপুরুষদের পুরো তালিকাটি লুপ করে নেওয়ার চেয়ে আরও মার্জিত সমাধান রয়েছে।