আইওএস এর আগের সংস্করণগুলিতে পুরানো ডিভাইসগুলির সাথে সামঞ্জস্যতা সরবরাহ করার সময় আইওএস 6 এর নতুন অটো লেআউট বৈশিষ্ট্যগুলির সুবিধা নেওয়ার সর্বোত্তম উপায় কী?
আইওএস এর আগের সংস্করণগুলিতে পুরানো ডিভাইসগুলির সাথে সামঞ্জস্যতা সরবরাহ করার সময় আইওএস 6 এর নতুন অটো লেআউট বৈশিষ্ট্যগুলির সুবিধা নেওয়ার সর্বোত্তম উপায় কী?
উত্তর:
অটোলেআউট প্রতিটি। স্টোরবোর্ড বা .xib ফাইলে সক্ষম বা অক্ষম করা যায়। কেবলমাত্র নির্দিষ্ট ফাইলটি নির্বাচন করুন এবং এক্সকোডে ফাইল ইন্সপেক্টর ব্যবহার করে "অটোলেআউট ব্যবহার করুন" সম্পত্তিটি সংশোধন করুন:
সংকলন ত্রুটিগুলির 6.0 ফলাফলের পূর্বে একটি আইওএস সংস্করণে সেট করা মোতায়েনের টার্গেট সহ অটোলেআউট সক্ষম ইন্টারফেস ফাইলগুলি ব্যবহার করে যেমন:
মেইনস্টিরিবোর্ড.স্টোরিবোর্ডে ত্রুটি: 3: 6.0 এর পূর্বে আইওএস ভার্সনে অটো লেআউট
কোনও প্রকল্পে অটোলেআউট ব্যবহার করার এবং আইওএস 4-5 এর সাথে সামঞ্জস্যতা সংরক্ষণের আপনার বিকল্পগুলির মধ্যে একটি হ'ল দুটি লক্ষ্য তৈরি করা : একটি স্থাপনার লক্ষ্য আইওএস 6.0 এর জন্য এবং একটি পূর্ববর্তী আইওএস সংস্করণের জন্য, যেমন:
আপনি নিজের স্টোরিবোর্ড এবং এক্সআইবি ফাইলগুলির জন্য দুটি সংস্করণ তৈরি করতে পারেন এবং 6.০ টার্গেটের সাথে সক্ষম অটোলেআউট এবং অন্যটি উত্তরাধিকার লক্ষ্য সহ ব্যবহার করতে পারেন, যেমন:
তারপরে আপনি মেইনস্টিরিবোর্ডআউটসাইজ আইওএস 6 টার্গেটের বিল্ড পর্যায় এবং অন্য ফাইলটি আইওএস 4 টার্গেটে যুক্ত করুন। আপনি এখানে একাধিক লক্ষ্য ব্যবহার সম্পর্কে আরও শিখতে পারেন ।
সম্পাদনা: মার্চিন্রামের উত্তরে উল্লেখ করা হয়েছে যে আপনি কোড থেকে স্টোরিবোর্ড ফাইলগুলি লোড করে এবং প্রাথমিক স্টোরিবোর্ড সেট করতে যদি এক্সকোডে "মাইন স্টোরিবোর্ড" সেটিংস ব্যবহার না করেন তবে আপনি একটিমাত্র লক্ষ্য ব্যবহার করতে পারেন।
আমার জন্য, একাধিক লক্ষ্য এবং ইন্টারফেস ফাইল বজায় রাখার যুক্ত জটিলতার ব্যয় অটোলেআউট ব্যবহারের সুবিধাগুলি ছাড়িয়ে গেছে বলে মনে হচ্ছে। কয়েকটি বিশেষ ক্ষেত্রে বাদে, আইওএস 4-5 সামঞ্জস্যতা প্রয়োজন হলে একচেটিয়াভাবে প্লে ওল্ড অটো সাইজিং (বা কোড থেকে লেআউটসুউভিউস) ব্যবহার করা আপনি সম্ভবত আরও ভাল।
আপনার কি সত্যিই দুটি টার্গেট দরকার? আমি এটি এইরকমভাবে কাজ করতে পেরেছি, আমার 2 স্টোরিবোর্ড রয়েছে ইম্রে কেলেনি বলেছিলেন, একটিতে স্বতঃ লেআউট সক্ষম এবং অপরটি ছাড়াই, তারপরে অ্যাপ প্রতিনিধিতে আমি কেবল কোন সংস্করণটি তারা ব্যবহার করছে তা যাচাই করে সঠিক স্টোরিবোর্ডটি নির্বাচন করুন:
#import "AppDelegate.h"
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:(v) options:NSNumericSearch] != NSOrderedAscending)
@interface AppDelegate ()
@property (strong, nonatomic) UIViewController *initialViewController;
@end
@implementation AppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *mainStoryboard = nil;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
mainStoryboard = [UIStoryboard storyboardWithName:@"iPhone_iOS6" bundle:nil];
} else {
mainStoryboard = [UIStoryboard storyboardWithName:@"iPhone_iOS5" bundle:nil];
}
self.initialViewController = [mainStoryboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = self.initialViewController;
[self.window makeKeyAndVisible];
return YES;
}
@end
2 টি টার্গেট থাকা পাশাপাশি কাজ করে তবে আমার কাছে ওভারকিলের মতো লাগে
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
ওভারকিল শূন্যতার বিপরীতে কেবলমাত্র একটি আইওএস 6-ক্লাস পরীক্ষা করুন। দেখুন developer.apple.com/library/mac/#documentation/developertools/...
যদি বিন্যাসের পার্থক্যগুলি বড় না হয় তবে উপাদানগুলির অবস্থানের জন্য স্প্রিংস এবং স্ট্রুট ব্যবহার করা অনেক সহজ ।
@ মার্চিনরামের একটি লক্ষ্য লক্ষ্য দ্বারা অনুপ্রাণিত, এই সমাধানটিই আমি অবশেষে সামনে এলাম। দুটি স্টোরিবোর্ড, একটি স্ট্রুট এবং স্প্রিংয়ের জন্য এবং একটি অটোলেআউট। লক্ষ্য সংক্ষেপে, আমি অটোলেআউট স্টোরিবোর্ডটি ডিফল্ট হিসাবে সেট করি। তারপরে, অ্যাপ্লিকেশনটিতে, আমি যাচ্ছি যে আমার সর্বোপরি 6.0 পূর্বের স্ট্রুটস এবং স্প্রিংস স্টোরিবোর্ডটি লোড করা দরকার কিনা:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
Class cls = NSClassFromString (@"NSLayoutConstraint");
if (cls == nil) {
NSString *mainStoryboardName = nil;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
mainStoryboardName = @"MainStoryboard_iPad_StrutsAndSprings";
} else {
mainStoryboardName = @"MainStoryboard_iPhone_StrutsAndSprings";
}
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:mainStoryboardName bundle:nil];
UIViewController *initialViewController = [mainStoryboard instantiateInitialViewController];
self.window.rootViewController = initialViewController;
[self.window makeKeyAndVisible];
}
এছাড়াও, আমি স্ট্রুটস এবং স্প্রিংস স্টোরিবোর্ডের আইওএস 5.1 এবং অটোলেআউট স্টোরিবোর্ডের প্রজেক্ট এসডিকে (আইওএস 6.0) এর স্থাপনার লক্ষ্য নির্ধারণ করেছি।
স্টিরিবোর্ডে ডিফল্ট লোড হওয়ার আগে আমি উইল ফিনিশল্যাঞ্চিং উইথঅপশনগুলিতে সত্যই স্যুইচটি করতে চেয়েছিলাম: কিন্তু এর ফলে 'এনএসআইএনওটিওলইউআরইচওয়েপ্রেস এক্সপ্লেশন' এর ফলস্বরূপ, কারণ: 'এনএসএলআউটআউটকন্ট্রেন্ট নামের ক্লাসটি ইনস্ট্যান্ট করতে পারেনি' যাই হোক না কেন আমি চেষ্টা করেছি।
আরআরআউটওলয়েট ব্যবহার করার চেষ্টা করুন: https://github.com/RolandasRazma/RRAutoLayout এটি আইওএস 6-এ অটোলাআউট ব্যাকপোর্ট আইওএস 5 এ।