আইওএস 7 - স্ট্যাটাস বারটি ভিউটিকে ওভারল্যাপ করে


109

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

আমি কোনও ওএস নির্দিষ্ট কোড লিখতে চাই না।

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

আমি সেট View controller-based status bar appearanceকরার চেষ্টা করেছি NO, তবে এটি সমস্যার সমাধান করেনি।


আমি আমার উত্তর পোস্ট করেছেন আইওএস 7 এ আইওএস 6 মত স্ট্যাটাস বার দেখানোর জন্য stackoverflow.com/questions/18294872/...
মরুভূমি রোজ

2
স্ট্যাটাস বারের সমস্যাটি পরিচালনা করতে আপনাকে y উত্স এবং ব-দ্বীপের মানটিও সমন্বিত
গণপতিতে

উত্তর:


95

এক্সকোড 5 রয়েছে iOS 6/7 Deltasযা বিশেষত এই সমস্যাটি সমাধান করার জন্য তৈরি করা হয়েছে। স্টোরিবোর্ডে আমি আমার ভিউগুলি 20 পিক্সেল নীচে আইওএস 7 এ Delta yদেখতে সরাতে পেরেছি এবং এটিকে আইওএস 6 সামঞ্জস্যপূর্ণ করার জন্য, আমি -20 এ পরিবর্তন করেছি ।

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

যেহেতু আমার স্টোরিবোর্ডটি অটো-লেআউটটি ব্যবহার করছে না, তাই আইওএস 6 এ সঠিকভাবে দেখার উচ্চতার আকার পরিবর্তন করতে আমাকে Delta heightপাশাপাশি সেটও করতে হয়েছিল Delta Y


8
আপনার উত্তরটি ঠিক আছে তবে 4 "ডিসপ্লেতে কাজ করে না Please দয়া করে আপনার উত্তরটি আপডেট করুন যদি আপনি এটি 4 এর জন্যও" ডিসপ্লেতে কাজ করতে পারেন তবে। আগাম ধন্যবাদ.

2
@ অংকিতমহেতা আমাকে 4 "
আইফোনের

5
আমার জন্য কাজ। লক্ষ্য করুন যে এই ডেল্টাসটি দেখতে আপনাকে স্টোরিবোর্ডের জন্য 'পরিচয় এবং প্রকার' এর আওতায় 'অটোলেআউট ব্যবহার করুন' নির্বাচন করতে হবে।
মার্শ্যান্ট

2
আমি forY এর জন্য -২০ সেট করার পাশাপাশি জানতে পেরেছিলাম, আমাকেও +20
টোল্যান্ড হ্যান

3
স্ট্যাটাসবারের উচ্চতা পরিবর্তন হবে তখন কী হবে? এফ.এক্স .: যখন ব্যবহারকারী হট স্পট ইত্যাদি সক্রিয় করে .... তখন উচ্চতা 40px হয় ...
লুকাসজ

69

আপনি যদি কোনও স্ট্যাটাস বারটি একেবারেই না চান, আপনার এই ডেটা দিয়ে আপনার প্লিস্টটি আপডেট করতে হবে: এটি করার জন্য, প্লিস্টে, এই 2 টি সেটিংস যুক্ত করুন:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

আইওএস 7-এ আপনি একটি অ্যাপ্লিকেশনটি একটি ওভারলেড স্বচ্ছ স্ট্যাটাস বারকে সামনে রেখে ডিজাইন করবেন বলে আশা করা হচ্ছে। উদাহরণস্বরূপ নতুন আইওএস 7 ওয়েদার অ্যাপ্লিকেশনটি দেখুন।


3
এটি আসলে একমাত্র উত্তম উত্তর, যেহেতু এটি ইস্যুটি বোঝানো হয়েছিল ঠিক তেমন সমস্যার সমাধান করে es সুতরাং: upvotes প্রয়োজন!
এগারো5959

5
এটি কিছু পরিস্থিতিতে উপযুক্ত হতে পারে তবে আপনি স্ট্যাটাস বারটি গোপন করে খুব সতর্ক হতে চান। কেবলমাত্র মিডিয়া প্লেয়ার বা চিত্র দর্শকদের মতো ন্যায়সঙ্গতভাবে পূর্ণ পর্দার মতামতের জন্য।
হাসিবোট

1
@ এগারো৯৯৯, অ্যাপল-এর ​​স্বৈরাচারীরা যেভাবে অভিপ্রায় নিয়েছে তার অর্থ আপনি।
জনকে

1
অবশ্যই একটি ভিউ কন্ট্রোলারের (যা সত্যিই নোংরা লাগে) এর অফসেট পরিবর্তন করার চেয়ে ভাল এটি পছন্দ করুন।
বেঞ্জামিন ওমান

স্ট্যাটাস বারটি লুকানো কোনও ভাল ধারণা নয় ... আমি জানি আমি আইওএস 7 হ্যান্ডেল করার সহজতম উপায়, তবে
সময়করণের

43

এটি UIViewControllerআইওএস-এ 7 এর জন্য ডিফল্ট আচরণ The ভিউটি পূর্ণ-স্ক্রিন হবে যার অর্থ স্থিতি দণ্ডটি আপনার দর্শনটির শীর্ষটি coverেকে দেবে।

আপনার যদি কোনওটির UIViewControllerমধ্যে থাকে UINavigationControllerএবং নেভিগেশনবারটি দৃশ্যমান হয়, আপনার নীচের কোডটি থাকতে পারে viewDidLoadবা নেভিগেশনবারের জন্য একটি পটভূমি চিত্র থাকতে পারে do

self.edgesForExtendedLayout = UIRectEdgeNone;

আপনার যদি নেভিগেশনবারটি লুকিয়ে থাকে তবে আপনাকে 20 পয়েন্ট স্থানান্তরিত করে সমস্ত ইউআইভিউ উপাদানগুলিকে সামঞ্জস্য করতে হবে। আমি অন্য কোনও সমাধান দেখতে পাচ্ছি না। অটো লেআউট ব্যবহার করুন কিছুটা সহায়তা করবে।

আপনি যদি সামঞ্জস্যতা পিছিয়ে রাখতে চান তবে আইওএস সংস্করণ সনাক্ত করার জন্য নমুনা কোডটি এখানে।

NSUInteger DeviceSystemMajorVersion() {
    static NSUInteger _deviceSystemMajorVersion = -1;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        NSString *systemVersion = [UIDevice currentDevice].systemVersion;
        _deviceSystemMajorVersion = [[systemVersion componentsSeparatedByString:@"."][0] intValue];
    });

   return _deviceSystemMajorVersion;
}

18
সিস্টেম সংস্করণটি আনার, পার্সিং এবং তুলনা করার পরিবর্তে এটি ব্যবহার করার পরামর্শ দেওয়া হচ্ছেif ([self respondsToSelector:@selector(edgesForExtendedLayout)])
সেবাস্তিয়ান হোজাস

15

আমি নিজেই তৈরি করেছি কেবলমাত্র কাজের সমাধান।

এখানে আমার ইউআইভিউকন্ট্রোলার সাবক্লাস https://github.com/comotitos/ios7_overlaping

ইউআইভিউকন্ট্রোলার থেকে 1 টি সাবক্লাস

2 আপনার ক্লাস থেকে আপনার উইন্ডো.রোটভিউ নিয়ন্ত্রণকারীকে সাবক্লাস করুন।

3 ভয়েলা!

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        CGRect screen = [[UIScreen mainScreen] bounds];
        if (self.navigationController) {
            CGRect frame = self.navigationController.view.frame;
            frame.origin.y = 20;
            frame.size.height = screen.size.height - 20;
            self.navigationController.view.frame = frame;
        } else {
            if ([self respondsToSelector: @selector(containerView)]) {
                UIView *containerView = (UIView *)[self performSelector: @selector(containerView)];

                CGRect frame = containerView.frame;
                frame.origin.y = 20;
                frame.size.height = screen.size.height - 20;
                containerView.frame = frame;
            } else {
                CGRect frame = self.view.frame;
                frame.origin.y = 20;
                frame.size.height = screen.size.height - 20;
                self.view.frame = frame;
            }
        }
    }
}

4 আপনার স্ট্যাটাস বারটি সাদা করার জন্য এটি যুক্ত করুন [স্ব। উইন্ডো মেক্যকিঅ্যান্ডভিজিবল] এর ঠিক ঠিক পরে; !!!

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

তবে এটি শীর্ষে সময়টি দেখাচ্ছে না ... সবচেয়ে বড় অসুবিধা ... :(
ফাহিম পার্কার

দুর্দান্ত কাজ করে তবে চতুর্থ ধাপের জন্য আপনার ভিউ কন্ট্রোলারে পছন্দসই স্ট্যাটাসবার্ট স্টাইল ব্যবহার করা উচিত, কারণ সেটস্ট্যাটাসবারস্টাইল অবমূল্যায়ন করা হয়েছে এবং এটির ডিফল্ট ক্রিয়াটি কিছুই করা নয়। stackoverflow.com/a/19014724/1192732
CpnCrunch

13
-(UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

-(void)viewWillLayoutSubviews{

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) 
  {
    self.view.clipsToBounds = YES;
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenHeight = 0.0;
    if(UIDeviceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]))
        screenHeight = screenRect.size.height;
    else
        screenHeight = screenRect.size.width;
    CGRect screenFrame = CGRectMake(0, 20, self.view.frame.size.width,screenHeight-20);
    CGRect viewFrame1 = [self.view convertRect:self.view.frame toView:nil];
    if (!CGRectEqualToRect(screenFrame, viewFrame1))
    {
        self.view.frame = screenFrame;
        self.view.bounds = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    }
  }
}

প্লিস্টে কী যুক্ত করুন --- কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি দেখুন: না


প্রয়োজনে উইন্ডো রঙ পরিবর্তন করুন
দর্শিত শাহ

ধন্যবাদ, এটি আমার ওভারল্যাপিং সমস্যার সমাধান করেছে। তবে এখনও একটি সমস্যা রয়েছে - কন্ট্রোলার-ভিত্তিক স্ট্যাটাস বারের উপস্থিতি দেখুন: আমার ধারণা স্ট্যাটাস বারটি কোনও আড়াল করার দরকার নেই। তবে আমি যখন এটি হ্যাঁ সেট করি, তারপরে এটি স্ট্যাটাস বারটি দেখায় না এবং যখন আমি এটি সেট না করি তখন এটি স্ট্যাটাস বারটি দেখায়। প্লিজ আমাকে বলুন আমি কি ধারণা নিয়ে ভুল করছি নাকি?
নয়ন

1
আমি মনে করি কারণ ডিফিনিশলানচিং উইথঅপশনস'স সেল্ফ উইন্ডো.ব্যাকগ্রাউন্ড কালার = [ইউআইসি কালার ব্লু কালার] এ ডিফল্ট আধা ট্রান্সপার্যান্ট কালার সেট করুন; ' এবং
প্লিষ্টে

সুন্দর ধন্যবাদ! এছাড়াও, কেবল উল্লেখ করতে যে অ্যাপল ডক্স প্রস্তাব দিচ্ছে কিনা (এনএসফাউন্ডেশন ভার্সন নাম্বার <= এনএসফাউন্ডেশন ভার্সন নাম্বার_আইওএস_6_1) যদি checking} অন্য {} পরীক্ষা করে if চিয়ার্স!
জোয়েল বাল্মার

আপনাকে অনেক ধন্যবাদ। আপনার কোডটি আমাদের জন্য এতটাই সহায়ক P দয়া করে ভিউলইলআউটসুবউভিউস ফাংশন সম্পর্কে ব্যাখ্যা করা দরকার।
ব্যবহারকারী3182143

4

আইওএস-এ স্ট্যাটাস বারটি আড়াল করতে এই সাধারণ পদক্ষেপগুলি অনুসরণ করুন:

এক্সকোডে গিয়ে " Resources" ফোল্ডারটি খুলুন এবং " (app name)-Info.plist file" খুলুন ।

  • " View controller based status bar appearance" কীটি পরীক্ষা করুন এবং এর মান সেট করুন " NO"
  • " Status bar is initially hidden" কীটি পরীক্ষা করুন এবং এর মান সেট করুন " YES"

কী নেই তাহলে নির্বাচন করে "এটা যোগ করতে পারেন information property listশীর্ষে" এবং ক্লিক করুন + + আইকন


প্রশ্নটি স্পষ্টভাবে পড়ুন, তিনি স্ট্যাটাস বারটি পুরোপুরি গোপন করতে বলেন নি।
শায়ানক

1
@ অ্যাস্পারশনকাস্ট: তিনি জিজ্ঞাসা করেছিলেন "এটি এড়ানোর কোনও উপায় আছে কি?" এবং এটি এড়ানোর অন্যতম উপায়।
মনদীপ পাসবোলা


3

যদি এটি ব্যবহার করা হয় তবে xibখুব সহজ বাস্তবায়ন হ'ল পুনরায় আকারযুক্ত পতাকাগুলি (যা আপনি ইতিমধ্যে 3.5 "এবং 4" সামঞ্জস্যের জন্য ব্যবহার করবেন) দিয়ে একটি ধারক দৃশ্যের অভ্যন্তরে সমস্ত সংক্ষিপ্ত চিত্রগুলি আবদ্ধ করা যাতে ভিউ হায়ারার্কি দেখতে কিছুটা দেখতে লাগে

xib উত্তরাধিকারী

এবং তারপরে viewDidLoad, এর মতো কিছু করুন:

- (void)viewDidLoad
{
  [super viewDidLoad];
  // initializations
  if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) // only for iOS 7 and above
  {
    CGRect frame = containerView.frame;
    frame.origin.y += 20;
    frame.size.height -= 20;
    containerView.frame = frame;
  }
}

এইভাবে, আইওএস 7 এর সামঞ্জস্যের জন্য নিবগুলি সংশোধন করার দরকার নেই। আপনার যদি পটভূমি থাকে containerViewতবে এটি বাইরে রাখা যায় এবং এটি পুরো স্ক্রিনটি কভার করতে দেয়।


3

স্ট্যাটাস বারটি সরানোর জন্য এটি প্রয়োজনীয়। এখানে চিত্র বর্ণনা লিখুন


2

নেভিগেশন বারের জন্য:

এই কোড লেখা:

self.navigationController.navigationBar.translucent = NO;

শুধু আমার জন্য কৌশল।


1

ভিনসেন্টের উত্তর প্রান্তগুলি forExtendedLayout আমার পক্ষে কাজ করেছিল।

এই ম্যাক্রোগুলি ওএস সংস্করণটিকে আরও সহজ করে তুলতে নির্ধারণে সহায়তা করে

// 7.0 and above 
#define IS_DEVICE_RUNNING_IOS_7_AND_ABOVE() ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) 

// 6.0, 6.0.x, 6.1, 6.1.x
#define IS_DEVICE_RUNNING_IOS_6_OR_BELOW() ([[[UIDevice currentDevice] systemVersion] compare:@"6.2" options:NSNumericSearch] != NSOrderedDescending) 

আপনার প্রকল্পের প্রিফিক্স.পিছ ফাইলটিতে এই ম্যাক্রোগুলি যুক্ত করুন এবং যে কোনও জায়গায় অ্যাক্সেস করা যায়

if(IS_DEVICE_RUNNING_IOS_7_AND_ABOVE())
{
 //some iOS 7 stuff
 self.edgesForExtendedLayout = UIRectEdgeNone;
}

if(IS_DEVICE_RUNNING_IOS_6_OR_BELOW())
{
 // some old iOS stuff
}

1
আমার জন্য self.edgesForExtendedLayout = UIRectEdgeNone; কাজ করছে না ... কোন কারণে কেন?
ফাহিম পার্কার

1

আমি এই উত্তরটি দিয়ে একই প্রশ্নের সাথে অন্য পোস্টে আমার উত্তর পোস্ট করেছি।

অ্যাপল আইওএস 7 রূপান্তর গাইড থেকে, https://developer.apple.com/library/ios/docamentation/UserExperience/Concepual/TransitionGuide/ AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1

বিশেষত automaticallyAdjustsScrollViewInsets=YESএবং set self.edgesForExtendedLayout = UIRectEdgeNoneআমার জন্য কাজ করে যখন আমি ওভারল্যাপটি করতে চাই না এবং আমার কাছে একটি থাকে tableviewcontroller


0

আপনি যদি চান যে কোনও মূল্যে "অটোলেআউট ব্যবহার করুন" সক্ষম করা হবে তবে নিম্নলিখিত কোডটি ভিউডিডলোডে রাখুন।

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) 
{
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = NO;
        self.automaticallyAdjustsScrollViewInsets = NO;
}

0

ওয়াইটিপ্লেয়ারের ল্যান্ডস্কেপ ভিউ থেকে ফিরে আসার পরে আমার স্ট্যাটাস বার এবং নেভিগেশন বারটি ওভারল্যাপ হয়। @Compitos এর সংস্করণ চেষ্টা করার পরেও আমার সমাধানটি এখানে রয়েছে তবে আমার আইওএস 8 এ কাজ করছে না

- (void)fixNavigationBarPosition {
    if (self.navigationController) {
        CGRect frame = self.navigationController.navigationBar.frame;
        if (frame.origin.y != 20.f) {
            frame.origin.y = 20.f;
            self.navigationController.navigationBar.frame = frame;
        }
    }
}

আপনি যখনই নেভিগেশন বারের অবস্থান ঠিক করতে চান কেবল এই ফাংশনটি কল করুন। আমি ওয়াইটিপ্লেয়ারভিউডেলিগেটকে ফোন করেছিplayerView:didChangeToState:

- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state {
    switch (state) {
        case kYTPlayerStatePaused:
        case kYTPlayerStateEnded:
            [self fixNavigationBarPosition];
            break;
        default:
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.