আইওএস 5 এর সাথে পিছনের দিকে সামঞ্জস্য রেখে আইওএস 6 এ অটো লেআউট সক্ষম করুন


153

আইওএস এর আগের সংস্করণগুলিতে পুরানো ডিভাইসগুলির সাথে সামঞ্জস্যতা সরবরাহ করার সময় আইওএস 6 এর নতুন অটো লেআউট বৈশিষ্ট্যগুলির সুবিধা নেওয়ার সর্বোত্তম উপায় কী?


+1 টি। আপনি এটি বের করতে সক্ষম? কোন সুত্র ?
জনক নির্মল

পছন্দ করেছেন আইওএস 6 আগামীকাল (9/19/2012) আনুষ্ঠানিকভাবে প্রকাশ করা হবে। আশা করি এতে কিছু অতিরিক্ত ডকুমেন্টেশন অন্তর্ভুক্ত রয়েছে।
স্যাওলান্টেজ

আমি এখনও কিছু খুঁজে পাই না। মন অনুসন্ধানী জানতে চান!
বেন ক্রিগার

আমি মনে করি না যে এটি সম্ভব হবে। অনেকটা স্টোরিবোর্ড আইওএস 4 এ সম্ভব ছিল না।
লিও নাটান

দুটি নিব ফাইল সরবরাহের বাইরে, আমি কীভাবে এটি সম্ভব হবে তা দেখছি না। তবে আমি আপনার সাথে একমত
লিও নাটান

উত্তর:


120

অটোলেআউট প্রতিটি। স্টোরবোর্ড বা .xib ফাইলে সক্ষম বা অক্ষম করা যায়। কেবলমাত্র নির্দিষ্ট ফাইলটি নির্বাচন করুন এবং এক্সকোডে ফাইল ইন্সপেক্টর ব্যবহার করে "অটোলেআউট ব্যবহার করুন" সম্পত্তিটি সংশোধন করুন:

ফাইল পরিদর্শকের মধ্যে অটোলেউট সম্পত্তি

সংকলন ত্রুটিগুলির 6.0 ফলাফলের পূর্বে একটি আইওএস সংস্করণে সেট করা মোতায়েনের টার্গেট সহ অটোলেআউট সক্ষম ইন্টারফেস ফাইলগুলি ব্যবহার করে যেমন:

মেইনস্টিরিবোর্ড.স্টোরিবোর্ডে ত্রুটি: 3: 6.0 এর পূর্বে আইওএস ভার্সনে অটো লেআউট

কোনও প্রকল্পে অটোলেআউট ব্যবহার করার এবং আইওএস 4-5 এর সাথে সামঞ্জস্যতা সংরক্ষণের আপনার বিকল্পগুলির মধ্যে একটি হ'ল দুটি লক্ষ্য তৈরি করা : একটি স্থাপনার লক্ষ্য আইওএস 6.0 এর জন্য এবং একটি পূর্ববর্তী আইওএস সংস্করণের জন্য, যেমন:

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

আপনি নিজের স্টোরিবোর্ড এবং এক্সআইবি ফাইলগুলির জন্য দুটি সংস্করণ তৈরি করতে পারেন এবং 6.০ টার্গেটের সাথে সক্ষম অটোলেআউট এবং অন্যটি উত্তরাধিকার লক্ষ্য সহ ব্যবহার করতে পারেন, যেমন:

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

তারপরে আপনি মেইনস্টিরিবোর্ডআউটসাইজ আইওএস 6 টার্গেটের বিল্ড পর্যায় এবং অন্য ফাইলটি আইওএস 4 টার্গেটে যুক্ত করুন। আপনি এখানে একাধিক লক্ষ্য ব্যবহার সম্পর্কে আরও শিখতে পারেন ।

সম্পাদনা: মার্চিন্রামের উত্তরে উল্লেখ করা হয়েছে যে আপনি কোড থেকে স্টোরিবোর্ড ফাইলগুলি লোড করে এবং প্রাথমিক স্টোরিবোর্ড সেট করতে যদি এক্সকোডে "মাইন স্টোরিবোর্ড" সেটিংস ব্যবহার না করেন তবে আপনি একটিমাত্র লক্ষ্য ব্যবহার করতে পারেন।

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


29
স্বয়ংক্রিয় বিন্যাসের জন্য আইওএস 6 বা তার পরে প্রয়োজন। এটি আইওএস 5 নিয়ে কাজ করে না! পোস্ট করার আগে দয়া করে আপনার দাবিগুলি যাচাই করুন। আইওএস 5 তে প্রয়োজনীয় এপিআই নেই (যেমন NSLayoutConstraint ক্লাস)। যদি আমাকে বিশ্বাস করে না, কি অন্যান্য ব্যবহারকারীদের অভিজ্ঞতা খুঁজে বার করো যখন তারা আইওএস 5 স্বয়ংক্রিয়-বহির্বিন্যাস ব্যবহার করতে চেষ্টা করুন: stackoverflow.com/questions/11252057/... stackoverflow.com/questions/11198981/...
Imre Kelényi

1
হ্যাঁ আমি ঠিক বলেছি বলে মনে করি আমি এটি কিছু ডাব্লুডাব্লিউডিসি ভিডিওতে শুনেছি তবে এখন আমি এটি আইওএস 5.0 ডিভাইসে পরীক্ষা করেছি এবং এটি ক্র্যাশ হয়ে গেছে। আমি এই ভিডিওগুলি দিয়ে যাব এবং আমি এটি কোথায় শুনেছি তা যাচাই করব তবে ঠিক আপনি এটি আইওএস 5.0-এ ক্র্যাশ করেছেন ঠিক বলেছেন
আসাদ খান

@ ইম্রেকেলেনি আপনি অ্যাপ স্টোর এ কীভাবে জমা করবেন? আমি প্রক্রিয়াটির সাথে খুব বেশি পরিচিত নই, তবে আমি ভেবেছিলাম আপনি নিজের .app ফাইলের একটি জিপ করা সংরক্ষণাগার জমা দিন। দুটি টার্গেট থাকা কি এই প্রক্রিয়াটি কি আরও শক্ত করে তোলে? ধন্যবাদ।
ক্রিস্টাল

47

আপনার কি সত্যিই দুটি টার্গেট দরকার? আমি এটি এইরকমভাবে কাজ করতে পেরেছি, আমার 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 টি টার্গেট থাকা পাশাপাশি কাজ করে তবে আমার কাছে ওভারকিলের মতো লাগে


1
তুমি ঠিক. আপনি কোড থেকে স্টোরিবোর্ডগুলি লোড করুন এবং এক্সকোডে লক্ষ্যটির "মেইন স্টোরিবোর্ড" সেটিংস ব্যবহার করবেন না ততক্ষণ এটি কাজ করে। আমি আমার পোস্ট থেকে আপনার উত্তর একটি রেফারেন্স যোগ করুন।
ইম্রে কেলানাই

SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TOওভারকিল শূন্যতার বিপরীতে কেবলমাত্র একটি আইওএস 6-ক্লাস পরীক্ষা করুন। দেখুন developer.apple.com/library/mac/#documentation/developertools/...
অনুজ্জ্বল

হ্যাঁ ভাল বিষয়, আমি প্রাথমিকভাবে জবাব দেওয়ার সময় পুনরুদ্ধার সম্পর্কে ভাবা হয়নি
মার্চিন্রাম

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


3

@ মার্চিনরামের একটি লক্ষ্য লক্ষ্য দ্বারা অনুপ্রাণিত, এই সমাধানটিই আমি অবশেষে সামনে এলাম। দুটি স্টোরিবোর্ড, একটি স্ট্রুট এবং স্প্রিংয়ের জন্য এবং একটি অটোলেআউট। লক্ষ্য সংক্ষেপে, আমি অটোলেআউট স্টোরিবোর্ডটি ডিফল্ট হিসাবে সেট করি। তারপরে, অ্যাপ্লিকেশনটিতে, আমি যাচ্ছি যে আমার সর্বোপরি 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) এর স্থাপনার লক্ষ্য নির্ধারণ করেছি।

স্টিরিবোর্ডে ডিফল্ট লোড হওয়ার আগে আমি উইল ফিনিশল্যাঞ্চিং উইথঅপশনগুলিতে সত্যই স্যুইচটি করতে চেয়েছিলাম: কিন্তু এর ফলে 'এনএসআইএনওটিওলইউআরইচওয়েপ্রেস এক্সপ্লেশন' এর ফলস্বরূপ, কারণ: 'এনএসএলআউটআউটকন্ট্রেন্ট নামের ক্লাসটি ইনস্ট্যান্ট করতে পারেনি' যাই হোক না কেন আমি চেষ্টা করেছি।



0

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

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