অটোলেআউট - অর্ধ তত্ত্বাবধানের উচ্চতার তুলনায় দেখার উচ্চতা তৈরি করুন


136

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

এখন, আমি কীভাবে এটি করব তা আমার জীবনের জন্য দেখতে পাচ্ছি না। এটি সেট আপ করার চেষ্টা করার পরে আমি যা পাই তা এখানে:

ব্লাউজ

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

কিছুক্ষণ সংগ্রাম করার পরে, আমি এটি করার একমাত্র উপায় হ'ল এই দৃশ্যের নীচে অন্য দৃষ্টিভঙ্গি প্রবর্তন করা, তাদের উচ্চতা সমানভাবে পিন করা, তাদের একে অপরের উপরে এবং নীচে বসতে এবং তারপরে দ্বিতীয় (নীচে) দৃশ্যটি অদৃশ্য হওয়ার জন্য সেট করা .. যা কিছুটা কুৎসিত মনে হচ্ছে!

আমি কি স্পষ্ট কিছু মিস করছি? ..


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

উত্তর:


167

এটি এখন আইবিতে [কমপক্ষে] এক্সকোড 5.1.1 হিসাবে সম্ভব। যদিও এটি নির্ধারণ করতে আমার কিছুটা সময় লেগেছিল এটি আসলে অতি সাধারণ:

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

উপরে পদক্ষেপের বিক্ষোভ

তারপরে আপনি গুণকটি সামঞ্জস্য করতে পারেন। যদি আপনি এটি চান তবে সুপার ভিউর 50% এটি এটিকে ছেড়ে যান 1, যেহেতু এটি সুপারের কেন্দ্র অনুযায়ী প্রান্তিক হয়। এটি অন্যান্য শতাংশের মতো দর্শন তৈরি করারও একটি দুর্দান্ত উপায় (যেমন 25% সুপার ভিউ)

উপরে দ্বিতীয় পদক্ষেপের বিক্ষোভ


সুন্দর :) আমি মনে করি এই পোস্টটি গৃহীত উত্তর হিসাবে চিহ্নিত করা উচিত :) আইওএস বিকাশকারী প্রায়শই কোড-মত সমাধানের চেয়ে ইন্টারফেস বিল্ডার সমাধানটিকে পছন্দ করেন
এইচটিএইচটি

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

3
আমি কিছুটা বিভ্রান্ত আমি এটি চেষ্টা করেছিলাম তবে এটি কেবল তত্ত্বাবধানে দৃশ্যকে কেন্দ্র করে, এটি দেখার উচ্চতা সামঞ্জস্য করে না।
ডিন

@Dean, আপনি কি নিশ্চিত যে করতে হবে First Itemহয় View.Topনা View.Center Y। অন্যথায়, হ্যাঁ এটি কেবল এটি কেন্দ্র করে দেবে। এছাড়াও দেখার অন্যান্য প্রান্তগুলি পরিচালনা করতে অন্যান্য সীমাবদ্ধতা সঠিকভাবে সেট করা আছে তাও আপনাকে নিশ্চিত করতে হবে।
ফিরো

1
ভিউ.টপ সুপারভিউয়ের সমান। সেন্টার ওয়াই গুণক 1 আপনাকে কোনও উচ্চতা দেয় না। এই উত্তরটি অসম্পূর্ণ। আপনাকে যা করতে হবে তা হ'ল আপনি যা বলছেন সে সম্পর্কে ভাবনা এবং আপনি দেখতে পাচ্ছেন এটি আপনাকে কেন্দ্র জুড়ে একটি লাইন দেয়! আপনি অন্যান্য বাধাগুলি সম্পর্কে কী কথা বলছেন তা পরিষ্কার করার জন্য আমি এই উত্তরটি সম্পাদনা করব।
হাসিবোট

184

স্টোরিবোর্ড সমাধান যেখানে আপনি যে কোনও দর্শনগুলির মধ্যে নিখুঁত অনুপাত সেট করতে পারেন:

উচ্চতা সমতার সীমাবদ্ধতা সেট করুন

এখন:

সীমাবদ্ধতার গুণকটি সম্পাদনা করুন

লাভ !!!

ফলাফল

পিএস এছাড়াও নোট করুন যে এই পদ্ধতিটি বিভিন্ন নেস্টিং স্তরের এবং (স্পষ্টতই) প্রস্থের জন্য প্রযোজ্য দর্শনের সাথে কাজ করে

পিপিএস কখনও কখনও বাধা বা "বিপরীত গুণক নির্ধারণের উদাহরণস্বরূপ" প্রথম এবং দ্বিতীয় আইটেমটি "(যেমন 0.5 এর পরিবর্তে 2) সেট করতে সহায়ক হতে পারে (তবে আপনি কীভাবে একে অপরের মধ্যে সম্পর্ক সম্পর্কিত তা বুঝতে না পারলে এই পদ্ধতিগুলি সহায়ক নয়)।


1
দ্বিতীয় ধাপটি আমার পক্ষে কাজ করে না বলে মনে হচ্ছে। আমি 'কনস্ট্রেন্ট টু মার্জিন' টগল করা ছাড়া প্যানেলে কিছুই নির্বাচন করতে পারি না। আমি একটি ইউআইটিএবলভিউসেলতে একটি ইউআইআইমেজভিউর প্রস্থকে সামগ্রীর দৃশ্যের 50% এ সেট করার চেষ্টা করছি।
DrMickeyLauer

2
আপডেট: স্পষ্টতই ইন্টারফেস বিল্ডার সামগ্রী সামগ্রীটিকে কোনও অটো লেআউট সীমাবদ্ধতার সুস্পষ্ট লক্ষ্য হতে দেয় না। এই কাজটি করতে আমাকে কন্টেন্ট ভিউয়ের শিশু হিসাবে একটি ডামি সাবভিউ inোকাতে হবে।
DrMickeyLauer

1
এটা আমার জন্য কাজ করে. আপনাকে তালিকাতে দু'টি দর্শন নির্বাচন করতে হবে নির্মাতার স্ক্রিনটি নয়। শতাংশের জন্য গুণক মান উদাহরণ ছোট দর্শন 25, বৃহত্তর দর্শন 135 - 25/135 = 0.185 পেতে বৃহত্তর দর্শন দ্বারা ছোট দর্শনকে বিভক্ত করে। X1 এবং x2 = 25 এ দেখতে বৃহত্তর মান হিসাবে সেট করুন তবে বৃহত্তর 6 এবং 6 প্লাস ইত্যাদির সাথে স্কেল আপ করুন
latenitecoder

1
এটি আমার পক্ষে কাজ করেছে, তবে দয়া করে নোট করুন যে আমাকে তিনটি প্রতিবন্ধকতাও যুক্ত করতে হয়েছিল যা সংক্ষিপ্তসারটির মার্জিন সীমাবদ্ধতা 0 তে নির্ধারণ করেছিল
রডদেবাস

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। প্রথমে আমি স্বীকৃত উত্তর চেষ্টা করি। এটি কাজ করে না তখন আমি নীচে স্ক্রোল করি এবং আমি এই উত্তরটি দেখেছি এবং এটি কাজ করে। ধন্যবাদ!
মিহির ওজা

31

আরও কিছু সময় পরে আমি নিম্নলিখিতটি নিয়ে এসেছি।

আমি এটিকে একটি উত্তর হিসাবে উল্লেখ করছি তবে এটি খুব সন্তোষজনক নয়, কারণ এটি ধরে নিয়েছে যে আপনি আসলে ইন্টারফেস বিল্ডারে এটি করতে পারবেন না, তবে সঠিক সীমাবদ্ধতাটি পরে কোড হিসাবে যুক্ত করা যেতে পারে:

- (void) viewWillAppear:(BOOL)animated
{

    NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:upperview
                                                                 attribute:NSLayoutAttributeHeight 
                                                                 relatedBy:0 
                                                                    toItem:self.view
                                                                 attribute:NSLayoutAttributeHeight
                                                                multiplier:.5 
                                                                  constant:0];
    [self.view addConstraint:constraint];

}

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

সুতরাং যদি কেউ ইন্টারফেস বিল্ডারে এটি কীভাবে করতে পারে তা দেখিয়ে দিতে পারে, এটি আমার প্রশ্নের উত্তরটি আরও ভাল করে দেবে, অন্যথায় আমি অনুমান করি যে এটি এখনকার মতই ভাল (এখনকার জন্য) ???


3
আমি মনে করি এটি এখন যতটা উত্তম হিসাবে রয়েছে। এটি চমৎকার হবে যদি অ্যাপল আমাদের আইবিতে গুণক মান অ্যাক্সেস দেয়, যাতে ধ্রুবকের পাশাপাশি সেট করা যায়।
rdelmar

3
এই উত্তরটি দেখার জন্য যে কেউ, এক্সকোড 5.1 আপনাকে ইন্টারফেস বিল্ডারের মাধ্যমে গুণক সেট করার অনুমতি দেয় set আমি এখন আইবি এর মাধ্যমে তাদের তত্ত্বাবধানের অর্ধেক উচ্চতার মতামতগুলি কনফিগার করতে সক্ষম হয়েছি।
মার্ক ক্রেনেক

9

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

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

- তারপরে আকার পরিদর্শককে ক্লিক করুন। - তারপরে সীমাবদ্ধতায় ডাবল ক্লিক করুন। এখানে চিত্র বর্ণনা লিখুন

- নিশ্চিত করুন যে উভয় আইটেমের জন্য "উচ্চতা" নির্বাচন করা হয়েছে। এখানে চিত্র বর্ণনা লিখুন

-তখন অর্ধেক স্ক্রিনের জন্য "গুণককে" ০.৫ এ পরিবর্তন করুন বা আপনার যে সুপারভিউয়ের ভগ্নাংশটি চান তা পরিবর্তন করুন। এখানে চিত্র বর্ণনা লিখুন


সহজ এবং দ্রুত পদ্ধতির!
আবদুল্লাহ

7

কোডে আমার আরও একটি সম্ভাবনা রয়েছে যদি আপনার 2 টি মতামত একই রকমের হওয়া উচিত: কেবল ভিউ 2 এর উচ্চতাটি ভিউ 1 এর উচ্চতায় নির্ধারণ করুন (এখানে কৌশলটি স্পষ্টতই ভিউ 1 এর উচ্চতা নির্ধারণ করছে না)।

    [self.view addConstraints:[NSLayoutConstraint
        constraintsWithVisualFormat:@"V:[topLayoutGuide]-0-[_view1]-0-[_view2(==_view1)]-0-[bottomLayoutGuide]"
                            options:0
                            metrics:nil
                              views:viewsDict]];

বুঝতে পারিনি যে আপনি এর মতো প্রস্থ / হাইটের জন্য অন্যান্য মতামত উল্লেখ করতে পারেন। আপনি ইতিমধ্যে ভিজ্যুয়াল বিন্যাসের ভাষাতে থাকলে এটিই সবচেয়ে পরিষ্কার উত্তর আইএমও।
loeschg

@ ব্রেনরাই উদাহরণটি এখানে ডেভেলপার.এপল.কম
alecs.popa

0

মেটের উত্তরের সুইফ্ট সংস্করণ:

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.



    upperView.translatesAutoresizingMaskIntoConstraints = false


    var constraint = NSLayoutConstraint(item: upperView,
                                        attribute: NSLayoutAttribute.top,
                                        relatedBy: NSLayoutRelation.equal,
                                        toItem: self.view,
                                        attribute: NSLayoutAttribute.top,
                                        multiplier: 1,
                                        constant: 0)

    self.view.addConstraint(constraint)


    constraint = NSLayoutConstraint(item: upperView,
                                    attribute: NSLayoutAttribute.height,
                                    relatedBy: NSLayoutRelation.equal,
                                    toItem: self.view,
                                    attribute: NSLayoutAttribute.height,
                                    multiplier: 0.5,
                                    constant: 0)

    self.view.addConstraint(constraint)


    constraint = NSLayoutConstraint(item: upperView,
                                    attribute: NSLayoutAttribute.leading,
                                    relatedBy: NSLayoutRelation.equal,
                                    toItem: self.view,
                                    attribute: NSLayoutAttribute.leading,
                                    multiplier: 1,
                                    constant: 0)

    self.view.addConstraint(constraint)


    constraint = NSLayoutConstraint(item: upperView,
                                    attribute: NSLayoutAttribute.trailing,
                                    relatedBy: NSLayoutRelation.equal,
                                    toItem: self.view,
                                    attribute: NSLayoutAttribute.trailing,
                                    multiplier: 1,
                                    constant: 0)

    self.view.addConstraint(constraint)


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