ইন্টারফেস বিল্ডার: ইউআইভিউর লেআউট আইওএস 6/7 ডেল্টাস কীসের জন্য?


111

আমি সবেমাত্র ইউআইভিউয়ের স্ট্রাক্ট লেআউটের অধীনে আইওএস 6/7 ডেল্টা সম্পত্তি পেয়েছি।

এটি কীসের জন্য এবং অটোলআউট থেকে কেন অনুপস্থিত?

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

উত্তর:


83

এটি আসলে iOS6 থেকে iOS7 এর মধ্যে লেআউট পজিশনের মধ্যে ডেল্টাকে বোঝায়।

আইওএস 7-তে, কিছু দর্শন স্থিতি দণ্ডটি আড়াল করতে পারে বা এটি স্বচ্ছ থাকতে পারে এবং ফলস্বরূপ, এটি আপনার দৃশ্যের শীর্ষে আবৃত থাকে। সুতরাং আপনি যদি iOS6 এ কোনও ইউআই উপাদান (0.0, 0.0) রাখেন তবে এটি স্ট্যাটাস বারের নীচে প্রদর্শিত হবে, তবে আইওএস 7 এ এটি স্ট্যাটাস বারের নীচে আংশিকভাবে আবৃত হবে। সুতরাং সেক্ষেত্রে আপনি এমন একটি ব-দ্বীপ চান যা স্ট্যাটাস বারের উচ্চতার (20.0 পয়েন্ট) এর সাথে মেলে যাতে লেআউটটি iOS6 এবং iOS7 এ একই দেখায় the

আমি বিশ্বাস করি যদি আপনি অটোলেআউট ব্যবহার করেন তবে এটির দরকার নেই, তবে অবশ্যই আপনি আইপ্যাড 1 সমর্থন হারাবেন, যা আমাদের মধ্যে অনেকেই এই সময়ে স্বীকার করতে রাজি নন।


27
আমার জন্য, আমি এটি আইওএস 7 থেকে আইওএস 6 পর্যন্ত ব
দ্বীপটি পেয়েছি I.

এটি ইউআইপিগ্রোসভিউয়ের সাথে বিশেষত কার্যকর যা আইওএস 7
লি লিবার্ট

108

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

কেন এটি অটোলআউটটির জন্য উপস্থিত হয় না?

আপনি যেমন খেয়াল করেছেন, আইওএস 7 সম্পূর্ণ নতুন চেহারা নিয়ে আসে। ইউআই উপাদানগুলির চেহারা পরিবর্তন হয়েছে, তবে তাদের কয়েকটি আকার (বা সাধারণভাবে মেট্রিক) রয়েছে। এটি আইওএস 7 উভয়কে সামঞ্জস্য করতে ইন্টারফেস ডিজাইন তৈরি করতে পারে এবং এটি পূর্বসূরীদের কিছুটা ব্যথা করে।

এটি সমাধানের জন্য অ্যাটলাউট ব্যবহার করা অ্যাপলের অফিসিয়াল লাইন; এটি আপনার জন্য ইউআই উপাদান রাখার প্রচুর ঝামেলা উচিত take কখনও কখনও এটি অন্তর্ভুক্ত করা সহজেই সম্পন্ন হয় না, বিশেষত যদি আপনাকে এখনও ব্যবসায়ের কারণে আইওএস 5 সমর্থন করতে হয়, বা আপনার ইন্টারফেসগুলি এমনভাবে পরিচালনা করা হয় যা অটোলাউট বাস্তবায়নকে আরও কঠিন করে তোলে। এই হিসাবে, অ্যাপল মনে হয় আপনি যদি এই কুলুঙ্গি বিভাগে পড়ে থাকেন তবে আপনার কাজটি কিছুটা সহজ করার জন্য অ্যাপল একটি উপায় সরবরাহ করেছে এবং তারা এই আইওএসটিকে 6/7 ডেল্টাস বলেছে।

ঠিক আছে, তাহলে এটা কি করে?

ইন্টারফেস বিল্ডারের লেবেলটি এই প্রসঙ্গে 'ডেল্টা' অর্থ কী তা সম্পর্কে কিছুটা অস্পষ্ট, এই বৈশিষ্ট্যের সাথে সম্পর্কিত .xib ফাইলে থাকা কোডটি কিছুটা আরও স্পষ্ট:

<inset key="insetFor6xAndEarlier" minX="-50" minY="-100" maxX="-50" maxY="300"/>

মূল নামটি insetFor6xAndEarlierস্পষ্টভাবে জানিয়ে দেয় যে এটি কী করে; আইওএস 7 এর পূর্বসূরীদের চালানোর সময় আপনি ইউআই উপাদানগুলির জন্য বিকল্প ইনসেট সরবরাহ করতে পারেন। উদাহরণস্বরূপ, উপরোক্ত নিম্নলিখিত ব-দ্বীপ পরিবর্তন সংজ্ঞায়িত করেছেন:

x: 50
y: 100
width: -100
height: 200

.Xib এ সঞ্চিত মানগুলি সরাসরি উদ্ধৃত মানের সাথে মিলে যায় না, তবে তাদের মধ্যে একটি সম্পর্ক রয়েছে।

x: -minX
y: -minY
width: minX + maxX
height: minY + maxY

নীচের চিত্রগুলি দৃশ্যত এই পরিবর্তনটি দেখায়। এটি বেশ চরম উদাহরণ, তবে এটির ক্ষমতাটি প্রদর্শন করা। আমি অনুশীলনে কেবলমাত্র কয়েকটি পিক্সেলের বদ্বীপ পরিবর্তন আশা করব।

iOS7 দেখুন

iOS6 দেখুন

আপনি লক্ষ্য করতে পারেন যে মানগুলি আইওএস 6 ভিউয়ের জন্য বিপরীত হয়; এটি হ'ল ডেল্টাগুলি আপনার সাথে কাজ করার দৃশ্যের সাথে সম্পর্কিত। আপনি যদি আইওএস 6 এর জন্য সম্পাদনা করছেন, তবে ডেল্টাসগুলি আইওএস 7 এর জন্য উপাদানটিকে সঠিকভাবে রূপান্তর করার জন্য রয়েছে (উপরের উদাহরণের বিপরীতে)।

বিভিন্ন স্টাইলটি দেখতে, আপনি ইন্টারফেস বিল্ডার ওএসের উপর ভিত্তি করে এটি যেভাবে চালিত হবে তা পরিবর্তন করতে পারেন। এটি ফাইল ইন্সপেক্টর-> ইন্টারফেস বিল্ডার ডকুমেন্টের মধ্যে রয়েছে (ডান বারের 1 ম ট্যাব), তাই:

ইন্টারফেস স্টাইল স্যুইচ

আমি নিজের ইন্টারফেসটি হাতে হাতে কোড করতে চাইলে কি এটি বিদ্যমান?

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

সার্বিক ...

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

স্বাভাবিকভাবেই, আপনি যদি কেবলমাত্র আইওএস 7 এবং এর থেকে বেশি বিকাশ করে থাকেন তবে আপনার এই বৈশিষ্ট্যটি জানার দরকার নেই / এটি আবিষ্কার করবেন না। অটোলেআউট ছাড়াই, আইওএস 7 এসডিকে দিয়ে তৈরি করার সময় আপনার যদি অ্যাপ্লিকেশনটি চলমান আইওএস 6 ডিভাইসগুলির দরকার হয় তবেই আপনার ডেল্টাস দরকার।

লেখার সময় (২১ শে আগস্ট), আমি এই বৈশিষ্ট্য সম্পর্কিত কোনও ডকুমেন্টেশন পাচ্ছি না, বা ডাব্লুডাব্লুডিসি উপাদানগুলিতে কোনও উল্লেখও পাইনি। আমার চারপাশে একটি নাটক হয়েছে এবং কিছুটা গবেষণা করার পরে আমি এটি আবিষ্কার করেছি।


2
আপনাকে অনেক ধন্যবাদ ডাব্লুডিইউকে
কামার শাদ

এখন পর্যন্ত কোনও বৈশিষ্ট্য নেই, আমার যা জানা দরকার তা তা জানায় না
জ্যাস্পার

30

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

এই অ্যাপলের ট্রানজিশন গাইডটি পড়ুন - পূর্ববর্তী সংস্করণটিকে সমর্থন করে

'আইওএস 7.0 এবং তারপরে' 'হিসাবে' দেখুন চয়ন করুন

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

আইওএসের জন্য বেস ইউআই iOS. আইওএসের জন্য suitable উপযুক্ত ডেল্টা মান দেয়। এটি আইওএস 7 এবং আইওএস 6 ডিভাইসে কীভাবে রেন্ডার হবে তা দেখতে পূর্বরূপ ব্যবহার করুন।

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

দ্রুত পদক্ষেপ:

রুট ভিউয়ের প্রতিটি তাত্ক্ষণিক শিশুকে পৃথকভাবে নির্বাচন করুন এবং তার 'ওয়াই' মানতে 20px যুক্ত করুন।

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

তারপরে, সমস্ত তাত্ক্ষণিক শিশুদের সম্মিলিতভাবে নির্বাচন করুন এবং ডেল্টা ওয়াইকে -20px হিসাবে দিন। আপনি এটি ব্যাচে বা স্বতন্ত্রভাবেও করতে পারেন।

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


9

স্বতঃআপনার জন্য কমপক্ষে আইওএস 6.0 প্রয়োজন। আপনি যদি আইওএস 5.0 সমর্থন করতে চান তবে আপনি অটোলআউটটি ব্যবহার করতে পারবেন না।

এবং এই ডেল্টাগুলি আপনাকে বিভিন্ন আইওএস সংস্করণে (মূলত আইওএস 7 এবং আইওএস 7 এর চেয়ে কম সংস্করণে) অবস্থানের অবস্থানটি সামঞ্জস্য করতে সহায়তা করতে ব্যবহৃত হয়।

আমি এই মানটি আমাকে এই ছবিটি পছন্দ করতে সহায়তা করতে ব্যবহার করি। এখানে চিত্র বর্ণনা লিখুন


1
আমি যখন এইগুলি পরিবর্তন করি তখন কিছুই হয় না, এর সাথে কি আরও একটি পদক্ষেপ জড়িত?
পুনর্ব্যবহার করা ইস্পাত

@ রেসাইক্লড স্টিল আমার উত্তরটি এখানে দেখুন: লিংক
রিস্কভ

3

আইওএস //7 ডেল্টা কর্মে দেখতে, আমি কোনও সেগমেন্টডকন্ট্রোল দিয়ে ডেমো করব যা আইওএস and এবং আইওএস devices ডিভাইস উভয়ই সঠিকভাবে উপস্থিত হয়।

প্রথমে আপনার। Xib বা স্টোরিবোর্ডে ভিউকন্ট্রোলার নির্বাচন করুন। টিকচিহ্ন তুলে দিন ব্যবহার করুন স্বয়ংক্রিয়-বহির্বিন্যাস এবং "নির্বাচন করুন আইওএস হিসাবে দেখুন 7 এবং পরে "

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

ইন্টারফেস বিল্ডার ক্যানভাসে, আপনার সেগমেন্টডকন্ট্রোলটি রাখুন যাতে এটির উত্স 20 বছর হয় iOS আইওএস 6/7 ডেল্টায়, ডেল্টাওয়াইয়ের জন্য -20টি বেছে নিন

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

এটি আপনার সেগমেন্টযুক্ত নিয়ন্ত্রণটি আইওএস 6 এবং আইওএস 7 ডিভাইস উভয়ই স্থিতি বারের নীচে স্থাপন করবে

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

আইওএস 7 স্ট্যাটাস বারে বিকাশকারীদের গাইড থেকে অন্য দরকারী উক্তি

প্রতিটি দেখার জন্য ডেল্টাস পৃথকভাবে সেট করা যেতে পারে এবং আপনি যেমন আশা করেন তেমন কাজ করে। যদি আপনার স্টোরিবোর্ড বা নিবটি আইওএস 6 হিসাবে দেখার জন্য সেট করা থাকে, তবে ডেল্টাস সেট করার ফলে আইওএস 7 চলাকালীন সেটটি বদ্বীপের পরিমাণ অনুসারে স্থানটি বদলানো এবং / অথবা পুনরায় আকার দেওয়া হবে Al বিকল্পভাবে, যদি আপনার স্টোরিবোর্ড বা নিবটি সেট করা থাকে আইওএস in-এ, তখন আইওএস iOS-এ চালিত হওয়ার পরে ডেল্টাস প্রয়োগ করা হবে


0

আপনি যদি অটোলআউট ব্যবহার করছেন তবে ডেল্টা উপলব্ধ নেই। এটি চেষ্টা করুন (আইওএস 6 চলমান আইফোন 4 এস পরীক্ষিত):

- (void) viewWillLayoutSubviews {

//iOS 6 workaround offset
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7) {

    self.view.clipsToBounds = YES;
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenHeight = 0.0;
    screenHeight = screenRect.size.width;
    CGRect screenFrame = CGRectMake(0, -20, self.view.frame.size.width,self.view.frame.size.height+10);

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