কীভাবে এক্সকোড 6 অভিযোজিত ইউআইএসগুলি আইওএস 7 এবং আইওএস 6 এর সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ হতে পারে?


137

আমি সবেমাত্র ডাব্লুডাব্লুডিসি ভিডিও # 216, "ইউআইকিট দিয়ে অভিযোজিত ইউআই বিল্ডিং" দেখেছি।

নতুন পরিবর্তনগুলিকে সমর্থন করার জন্য টনি রিকার্ডি Xcode 6 এ আইবি-র পরিবর্তনের বিষয়ে কথা বলেছেন 45

তিনি বলেছেন "আপনি এই নথিগুলি iOS এর পুরানো সংস্করণগুলিতে পিছনে পিছনে স্থাপন করতে পারেন"।

(যেখানে "এই দস্তাবেজগুলি" সম্ভবত XIBs এবং স্টোরিবোর্ডগুলির অর্থ যা বিভিন্ন আকারের শ্রেণীর জন্য নির্দিষ্ট সেটিংস রয়েছে))

আমি এটি আপ করছি না। ডাব্লুডাব্লুডিসি ভিডিও দেখুন।

কীভাবে সম্ভব? বৈশিষ্ট্য সংগ্রহ এবং আকারের ক্লাসগুলি কেবলমাত্র আইওএস 8-এ সংজ্ঞায়িত করা হয়েছে 8. আইওএস 8-র নতুন যে আইওএস সংস্করণগুলিতে নতুন কাজ করা আছে তার উপর নির্ভরশীল রানটাইম আচরণ কীভাবে করতে পারে?

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


উত্তর:


151

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

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

আইওএস 8 এর আগে আইওএসের সংস্করণ সমর্থনকারী অ্যাপ্লিকেশনগুলির জন্য, বেশিরভাগ আকারের ক্লাসগুলি পশ্চাদপটে সামঞ্জস্যপূর্ণ।

আকার শ্রেণিগুলি পশ্চাদপটে সামঞ্জস্যপূর্ণ যখন:
- অ্যাপ্লিকেশনটি এক্সকোড সংস্করণ or বা
তার বেশি পরে ব্যবহার করে তৈরি করা হয়েছে - অ্যাপ্লিকেশনটির স্থাপনার লক্ষ্যটি আইওএস 8 এর চেয়ে আগে
- স্টোরিবোর্ড বা এক্সিবায় আকারের ক্লাসগুলি নির্দিষ্ট করা হয়
- উচ্চতার উপাদানটির মান কমপ্যাক্ট নয়

কারণ আইওএস 7 কয়েকটি আকারের শ্রেণিগুলিকে সম্মান করে না, যদি আপনি সেগুলি ব্যবহার করেন তবে আপনি সমস্যার সমাধান করবেন। উদাহরণস্বরূপ: আপনি যখন কমপ্যাক্ট ডব্লু কোনও সংঘটিত সংজ্ঞায়িত হন এবং তারপরে কমপ্যাক্ট ডব্লু কমপ্যাক্ট এইচ সংজ্ঞায়িত করেন, আইওএস 7 এ এটি কমপ্যাক্টকে সম্মান করবে তবে যে কোনও এইচ তবে আইওএস 8 এ এটি কমপ্যাক্ট ডাব্লু কমপ্যাক্ট এইচ উপস্থিতি রেন্ডার করে।

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


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

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

@ হকিউয়ালরাস আমি সবেমাত্র এক্সকোড 6 বিটা 7 দিয়ে পরীক্ষা করেছি এবং উত্তরে আমি যে সঠিক ফলাফলটি পেয়েছি ঠিক সেগুলি পেয়েছি। নিয়মিত নিয়মিত জন্য আইবিতে বাক্সের প্রস্থ পরিবর্তন করা আইপ্যাড চলমান আইওএস 7.1 এ সঠিকভাবে দেখায়।
জর্ডান এইচ

3
@ জোয়ি এটি কোনও বাগ নয়; এটি ইচ্ছাকৃত। Compact-Compactআইওএস 7 এর জন্য রফতানি হয় না; Compact-Regularহয়। আরও তথ্যের জন্য আমার উত্তর দেখুন।
ডেভ দেলং

2
গ্রহণযোগ্য উত্তর হওয়া উচিত, উপরের উত্তরটি বিভ্রান্তিকর।
ডোমিনিক ল্যাকাইল

68

আইওএস iOS এ আপনার অ্যাপ্লিকেশনটি স্থাপন করার সময়, এক্সকোড দুটি ভিন্ন উপায়ে আপনার স্টোরিবোর্ডটি সংকলন করবে:

  • আইফোনের জন্য, আপনার স্টোরিবোর্ডটি "কমপ্যাক্ট-নিয়মিত" (কমপ্যাক্ট প্রস্থ, নিয়মিত উচ্চতা) হিসাবে সংকলিত হয় এবং এটি আপনার "আইফোন" নীব হিসাবে প্যাকেজ হয়ে যায়।

  • আইপ্যাডের জন্য, আপনার স্টোরিবোর্ডটি "নিয়মিত-নিয়মিত" হিসাবে সংকলিত হয় এবং আপনার "~ আইপ্যাড" নিব হিসাবে প্যাকেজ হয়ে যায়।

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


আপনার উত্তর সম্পর্কে আমার বোধগম্যতা হ'ল আইপ্যাড আইওএস 7 এ "নিয়মিত-নিয়মিত" কাজ করা উচিত। কিন্তু এটা কাজ করছে না। আমি এক্সকোড 6 জিএম প্রকাশে পরীক্ষা করেছি। আমি যদি আপনার উত্তরটির ভুল ব্যাখ্যা করে থাকি তবে দয়া করে আমাকে সংশোধন করুন।
Iducool

4
দেখে মনে হচ্ছে নিয়মিত-নিয়মিত কেবল স্টোরিবোর্ডে কাজ করে, এক্সিব নয়
বোরিস চার্পেন্টিয়ার

@ বরিসচরপিয়েন্টিয়ার আমি সেই রডার সম্পর্কে একটি বাগ রিপোর্ট করেছি: // 18737656 , এটি # 18490866 খোলার সদৃশ হিসাবে বন্ধ ছিল
ম্যাক্সিম পাভলভ

@ বোরিসচর্পিটিয়ার আপনি কি xib এর কোন সমাধান খুঁজে পেয়েছেন?
saadnib

4
@ বোরিসচর্পিটিয়ার, আমি সবেমাত্র জানতে পেরেছি যে এই সমস্যাটি
এক্সকোড

27

দ্রষ্টব্য: এই উত্তরটি এক্সকোড 6 এর বিটা সংস্করণের সাথে প্রাসঙ্গিক ছিল এবং শিপিং সংস্করণে আর প্রযোজ্য নয়। সঠিক তথ্যের জন্য এই পৃষ্ঠায় জো এবং ডেভ ডিলংয়ের উত্তরগুলি দেখুন ।

(মূল উত্তর নীচে ধরে রাখা হয়েছে):


যদিও Storyboards/XIBsব্যবহারের আকার শ্রেণীর করার জন্য কনফিগার চলবে iOS 7, অপারেটিং সিস্টেম বর্তমানে ঐ শ্রদ্ধা করে না size classesডিফল্ট 'কোনো / কোন' আকার বর্গ ব্যবহার এবং প্রদর্শিত হয়।

আমি সম্মত হই যে আপনি যে স্লাইডটি উল্লেখ করছেন সেটি এমন সামঞ্জস্যতার প্রতিশ্রুতি বলে মনে হচ্ছে, তবে এটি বর্তমানে কেস হিসাবে দেখা যাচ্ছে না (Xcode 6 beta 2)

পরীক্ষার জন্য, আমি (iOS 8 SDK, deployment target of 7.1)একক বাটনটি দিয়ে একটি প্রকল্প তৈরি করেছি যা যে vertically and horizontallyকোনও / যে কোনও আকারের শ্রেণিতে কেন্দ্রীভূত , তবে কমপ্যাক্ট / কমপ্যাক্ট আকারের শ্রেণীর উপরের বাম কোণে প্রান্তিককরণ (যেমন আইফোন ল্যান্ডস্কেপ)। এক্সকোডের পূর্বরূপ সহকারীটি দেখায় যে বোতামটি তার অবস্থান পরিবর্তন করে iOS 8, তবে তা নয় iOS 7। আমি একটি iOS 7ডিভাইসেও এই আচরণটি নিশ্চিত করেছি।


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

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

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

3
এটি আর এক্সকোড 6 বিটার ক্ষেত্রে আর দেখা যাচ্ছে না I আমি সবে যুক্ত করা উত্তরটি দেখুন।
জর্দান এইচ

1
@ জো মাথা আপ জন্য ধন্যবাদ; আমি আপনার উত্তরটি পাঠকদের পাশাপাশি আপনার ডেভের জন্যও আমার উত্তর সম্পাদনা করেছি।
রেমাহ

12

যেহেতু কয়েকটি উত্তর এবং মন্তব্যগুলি পিছনের দিকে সামঞ্জস্যের প্রকৃতি নিয়ে আলোচনা করছিল, আমি ভেবেছিলাম অ্যাপল ডকুমেন্টেশন থেকে সরাসরি একটি অংশ ভাগ করব :

~~~~~

পূর্ববর্তী আইওএস সংস্করণগুলিতে আকার শ্রেণীর সাথে একটি অ্যাপ স্থাপন করা

আইওএস 8 এর আগে আইওএসের সংস্করণ সমর্থনকারী অ্যাপ্লিকেশনগুলির জন্য, বেশিরভাগ আকারের ক্লাসগুলি পশ্চাদপটে সামঞ্জস্যপূর্ণ।

আকার শ্রেণিগুলি পিছনে সামঞ্জস্যপূর্ণ যখন:

  • অ্যাপটি এক্সকোড সংস্করণ 6 বা তার পরে ব্যবহার করে তৈরি করা হয়েছে
  • অ্যাপের মোতায়েনের লক্ষ্যটি আইওএস 8 এর চেয়ে আগের than
  • আকারের ক্লাসগুলি স্টোরিবোর্ড বা এক্সিবায় নির্দিষ্ট করা হয়
  • উচ্চতার উপাদানটির মান কমপ্যাক্ট নয়

Discussion

এই শেষ বুলেট পয়েন্টটি এই আলোচনার লক্ষ্যবস্তু করা হয়েছে, যেখানে অ্যাপল নিশ্চিত করে যে "কমপ্যাক্ট উচ্চতা" ব্যবহার করা হয় না ততক্ষণ এটি পিছনের দিকে সামঞ্জস্য বজায় রাখতে হবে।

আশা করি এটি কাউকে সাহায্য করবে!


এটি এখন দস্তাবেজযুক্ত, পোস্ট করার জন্য ধন্যবাদ!
জর্দান এইচ

3

অনুরূপ ইস্যুটি মোকাবেলা করার সময় আমি আর একটি উত্তর পেয়েছি যা আমি এখনও এখানে দেখিনি। XIBফাইলগুলির আকারের ক্লাসগুলি মোটেই কাজ করছে না বলে মনে হচ্ছে । আমি যদি storyboardফাইলটিতে সেল প্রোটোটাইপ তৈরি করি তবে এটি iOS7 তে কাজ করে যা অন্যান্য উত্তরে ব্যাখ্যা করা হয়েছে, তবে যখন একই প্রোটোটাইপ সেল পৃথক XIBফাইলে স্থানান্তরিত হয় - তখন আইওএস 7-এ শ্রেণীর আকার অগ্রাহ্য করা হয়।

নমুনা প্রকল্পটির আচরণটি প্রদর্শন করার লিঙ্কটি এখানে: https://dl.rodboxusercontent.com/u/6402890/testSizeClasses.zip

প্রোটোটাইপ সেলে ধূসর দৃশ্যের প্রতিটি প্রান্ত থেকে আমার চারটি বাধা রয়েছে। প্রত্যেকটিরই একই পদ্ধতিতে কনফিগার করা হয়েছে: যে কোনও / যে কোনও - 10, নিয়মিত / নিয়মিত - 20

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

এটি এক্সআইবি এবং স্টোরিবোর্ড উভয়ের জন্য আইওএস 8 সিমুলেটরে দুর্দান্ত কাজ করে এবং আইওএস 7-এ কেবল স্টোরিবোর্ডে সংজ্ঞায়িত কক্ষগুলি আইপ্যাডে আপডেট হওয়া সীমাবদ্ধতা পায়:

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


^ ^% $ ^% @ # ^ & @ #% & ^% ... এবং এখানে আমি প্রচুর
xib

যথাযথভাবে। আমি আইফোন এবং আইপ্যাড স্টোরিবোর্ডগুলিকে এক সাথে সংযুক্ত করেছিলাম এবং ভেবেছিলাম যে সেলগুলি তাদের নিজস্ব XIB ফাইলে পৃথক করা সাহায্য করবে :)। আপনি আমার উত্তরটি +1 করতে পারলে আমি প্রশংসা করব।
শে

1
আমি একই আচরণ দেখছি।
bjtitus

2

এটি যদি কারও সময় সাশ্রয় করে তবে আমি বিশ্বাস করি যে এক্সকোড 6 মাপের শ্রেণীর জন্য যে পরিমাণটি অর্ধ-পিছনের সামঞ্জস্যতা সরবরাহ করে তা historical তিহাসিক ~ipadএবং ~iphoneপ্রত্যয়যুক্ত স্টোরিবোর্ডগুলির মাধ্যমে এবং আরও কিছু নয়। আকারের ক্লাসগুলি যেহেতু আমরা পূর্বে কোনও আইপ্যাড স্টোরিবোর্ড এবং আইফোন স্টোরিবোর্ডকে কীভাবে সংজ্ঞায়িত করেছি তার একটি বিমূর্ত উপায় হওয়ায় এটি বোঝা যায়।

অতএব:

  • যদি আপনার লক্ষ্যটি ডিভাইস পরিবারের নির্দিষ্ট লেআউটগুলি (আইপ্যাড বনাম আইফোন) সমর্থন করার জন্য আকারের ক্লাসগুলি ব্যবহার করা হয় তবে আপনি ভাগ্যবান: আকার সমর্থিত ক্লাসগুলি পূর্বের সমর্থিত পদ্ধতির একটি সুন্দর ইন্টারফেস।

  • যদি আপনার লক্ষ্য একই ডিভাইসের পরিবারের মধ্যে বিভিন্ন মডেলের পরিবর্তিত লেআউটগুলিকে সমর্থন করতে আকারের ক্লাসগুলি ব্যবহার করা হয় - যেমন। আইফোন 5/6/6 + ইনক। ল্যান্ডস্কেপ, তাহলে আপনি ভাগ্যের বাইরে । এগুলি ব্যবহারের জন্য সর্বনিম্ন আইওএস 8 স্থাপনার লক্ষ্য প্রয়োজন হবে।


1

@lducool - ইন্টারফেস বিল্ডারে, পরিচয় পরিদর্শকটিতে, 'বিল্ডস ফর' আইওএস 7.1 এবং পরে পরিবর্তন করুন।


আউটপুট মধ্যে কোন পার্থক্য।
আইয়াকুল

1

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

আমি তার জন্য একটি নির্দিষ্ট প্রশ্ন করেছি: আইফোন পোর্ট্রেট ল্যান্ডস্কেপ অভিযোজিত ইউআই এর উদাহরণ যা আইওএস 7 এর সাথে পিছনে সামঞ্জস্যপূর্ণ

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

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