কোডে অটো লেআউট ব্যবহার করার সময় ফ্রেম সেট করা কিছুই করে না। সুতরাং উপরোক্ত দৃশ্যে আপনি 200 প্রস্থের নির্দিষ্ট করেছেন, আপনি যখন এতে সীমাবদ্ধতা সেট করেন তখন কোনও অর্থ হয় না। কোনও দৃশ্যের সীমাবদ্ধতাটি দ্ব্যর্থহীন হওয়ার জন্য, এর জন্য চারটি জিনিস দরকার: একটি এক্স-অবস্থান, একটি ওয়াই-অবস্থান, প্রস্থ এবং কোনও প্রদত্ত রাষ্ট্রের জন্য একটি উচ্চতা।
বর্তমানে উপরের কোডটিতে আপনার কেবলমাত্র দুটি (উচ্চতা, তত্ত্বাবধানের সাথে তুলনামূলকভাবে এবং y- অবস্থান, তত্ত্বাবধানের তুলনায়) রয়েছে। এগুলি ছাড়াও, আপনার কাছে দুটি প্রয়োজনীয় সীমাবদ্ধতা রয়েছে যা ভিউর সুপারভাইভের সীমাবদ্ধতা কীভাবে সেটআপ হয় তার উপর নির্ভর করে বিরোধ করতে পারে। সুপারভিউতে যদি কোনও আবশ্যক সীমাবদ্ধতা থাকে যা এটির উচ্চতা 748 এর চেয়ে কম কিছু হতে পারে তা নির্দিষ্ট করে, আপনি একটি "অসন্তুষ্ট বাধা" ব্যতিক্রম পাবেন।
সীমাবদ্ধতা সেট করার আগে আপনি দৃশ্যের প্রস্থ নির্ধারণ করেছেন এর অর্থ কিছুই নেই। এটি এমনকি পুরানো ফ্রেমটিকেও বিবেচনায় নেবে না এবং views দর্শনগুলির জন্য নির্দিষ্ট করা সমস্ত প্রতিবন্ধকতার উপর ভিত্তি করে একটি নতুন ফ্রেম গণনা করবে। কোডে অটোলেআউট নিয়ে কাজ করার সময়, আমি সাধারণত initWithFrame:CGRectZero
কেবল বা সহজভাবে ব্যবহার করে একটি নতুন ভিউ তৈরি করি init
।
আপনার প্রশ্নে মৌখিকভাবে বর্ণিত বিন্যাসের জন্য প্রয়োজনীয় প্রতিবন্ধকতা সেট তৈরি করতে, একটি সম্পূর্ণ নির্দিষ্ট লেআউট দেওয়ার জন্য আপনাকে প্রস্থ এবং এক্স-অবস্থানের সাথে আবদ্ধ করতে কিছু অনুভূমিক সীমাবদ্ধতা যুক্ত করতে হবে:
[self.view addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-[myView(>=748)]-|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:NSDictionaryOfVariableBindings(myView)]];
[self.view addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:[myView(==200)]-|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:NSDictionaryOfVariableBindings(myView)]];
এই লেআউটটি ভার্চুয়ালভাবে বর্ণনা করে উল্লম্ব সীমাবদ্ধতা দিয়ে শুরু করে:
মাইভিউ তার তত্ত্বাবধানের উচ্চতাটি স্ট্যান্ডার্ড স্পেসের সমান শীর্ষ এবং নীচের প্যাডিং দিয়ে পূর্ণ করবে। মাইভিউর তত্ত্বাবধানে সর্বনিম্ন উচ্চতা 8৪৮ পিটি রয়েছে। মাইভিউয়ের প্রস্থ 200pts এবং এর তত্ত্বাবধানের বিপরীতে মান জায়গার সমান ডান প্যাডিং রয়েছে।
যদি আপনি কেবল সুপারভিউয়ের উচ্চতা সীমাবদ্ধ না করে পুরো তত্ত্বাবধানের উচ্চতা পূরণ করতে ভিউটি পছন্দ করেন তবে আপনি কেবল (>=748)
ভিজ্যুয়াল বিন্যাসের পাঠ্যে প্যারামিটারটি বাদ দিতে পারেন । যদি আপনি মনে করেন যে (>=748)
প্যারামিটারটি এটি একটি উচ্চতা দেওয়ার প্রয়োজন - আপনি এই উদাহরণটিতে নেই: বার ( |
) বা স্পেস ( |-
, -|
) সিনট্যাক্স সহ বারটি ব্যবহার করে সুপারভিউয়ের প্রান্তগুলিতে ভিউটি পিনিং করছেন , আপনি নিজের দর্শনটি একটি y -পজিশন (একক প্রান্তে ভিউটি পিন করা) এবং উচ্চতা সহ একটি ওয়াই-পজিশন (উভয় প্রান্তে ভিউটি পিন করা), যাতে এই দৃশ্যের জন্য আপনার সীমাবদ্ধতাটিকে সন্তুষ্ট করে।
আপনার দ্বিতীয় প্রশ্নের ক্ষেত্রে:
ব্যবহার NSDictionaryOfVariableBindings(self.myView)
(যদি আপনি myView জন্য একটি সম্পত্তি সেটআপ ছিল) এবং খাওয়ানোর আপনার VFL মধ্যে ব্যবহার করতে self.myView
আপনার VFL পাঠে, আপনি সম্ভবত একটি ব্যতিক্রম যখন স্বয়ংক্রিয়-বহির্বিন্যাস চেষ্টা আপনার VFL টেক্সট বিশ্লেষণ করতে হবে। এটি অভিধানের কীগুলিতে এবং সিস্টেমটি ব্যবহারের চেষ্টা করার ক্ষেত্রে ডট সংকেত দিয়ে কাজ করে valueForKeyPath:
। অনুরূপ প্রশ্ন এবং উত্তর জন্য এখানে দেখুন ।