আইওএস 11 আইফোন এক্স সিমুলেটর ইউআইটিববার আইকন এবং শিরোনাম শীর্ষে coveringেকে দেওয়া উপর রেন্ডার করা হচ্ছে


134

ইউআইটিববার উপাদানটির চারপাশে আইফোন এক্স সিমুলেটর নিয়ে কারও সমস্যা আছে?

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

আইফোন এক্স:

আইফোন এক্স ইউআইটিববার বাগ

আইফোন 8

আইফোন 8 ইউআইটিববার কাজ করে


1
আমার অনুরূপ ইস্যু: আইফোন এক্স 16 পয়েন্ট সম্পর্কে কনসোল-এর ট্যাব দৃশ্য নির্বাচন সূচকটি ইমেজ দৃশ্য কুন্ড
Itachi

এফওয়াইআই - এটি দুর্ভাগ্যক্রমে এক্সকোড
9.2

এটি একটি ইউিকিত বাগ যা এখনও বিদ্যমান। সীমাবদ্ধতা ঠিক ঠিক সেট আপ করতে হবে। আমার উত্তর নীচে দেখুন!
RyanM

আমার মতো সমস্যা ছিল এই উত্তরটি দেখুন stackoverflow.com/a/53524635/5441253
ম্যাক্সিমিম আশুরভ

উত্তর:


40

আমি ইউআইডিটিবারটিতে কেবলমাত্র ভিডইডলয়আউটসুভিউগুলিতে অবৈধভাবে ইন্ট্রিন্সিক কনসেন্টসাইজ কল করে সমস্যাটি সরাতে সক্ষম হয়েছি।

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    [self.tabBar invalidateIntrinsicContentSize];
}

দ্রষ্টব্য: ট্যাব বারের নীচে সুরক্ষিত অঞ্চলটির পরিবর্তে মূল দৃশ্যের নীচে থাকা দরকার এবং ট্যাব বারটির উচ্চতার সীমাবদ্ধতা থাকা উচিত নয়।


আমি নীচে বাধা নেই এমন একটি ট্যাব বার পেয়েছি, নীচে লেআউট গাইডটিতে সীমাবদ্ধ এবং এটি আমার পক্ষে কার্যকর হয়নি। অন্য কোন ধারণা?
কেনি ওয়াইল্যান্ড

1
যখন হোমভিসি ভিসি এ উপস্থাপন করবেন তখন কাজ করছেন না, তারপরে এটিকে বরখাস্ত করুন এবং ভিসি বি কে হোমভিসি থেকে চাপ দিন। এটি একটি কার্যনির্বাহী স্ট্যাকওভারফ্লো.com
ooops

1
এই পদ্ধতি তার superview নীচে (ট্যাব বার পিন সঙ্গে মিলিত যোগ করার পদ্ধতি না নিরাপদ অঞ্চল) আমার জন্য কাজ করেন।
ড্র সি সি

3
আমারও যোগ করার দরকার ছিল [self.view layoutIfNeeded]
আইলিয়ান ওনোফ্রেই

1
এই কাজ কিন্তু আমি আমি এর মাপ মনোযোগ দিতে হবে শিখেছি চিত্র ট্যাব বার বোতাম হবে। ল্যান্ডস্কেপ মোডে (কমপ্যাক্ট ডিভাইসগুলিতে, তবে আইপ্যাড এবং আইফোন প্লাস মডেলগুলিতে নয়), সিস্টেমটি একটি কমপ্যাক্ট ট্যাব বার ব্যবহার করে যাতে মনে হয় যে আপনি ছোট landscapeImageট্যাবগুলি ট্যাব বার বোতামের সম্পত্তি দিয়ে সেট করতে পারেন । প্রস্তাবিত আকারগুলি কাস্টম আইকন আকারের অধীনে [অ্যাপল
এইচআইজি'র

25

ভয়েডলেসের সরবরাহিত উত্তর ট্যাববার সমস্যাগুলিকে কেবল আংশিকভাবে সমাধান করে। এটি ট্যাববারের মধ্যে লেআউট সমস্যাগুলি সমাধান করে তবে আপনি যদি ট্যাববারটি আড়াল করে এমন ভিউকন্ট্রোলার ব্যবহার করেন তবে ট্যাববারটি অ্যানিমেশনগুলির সময় ভুলভাবে রেন্ডার করা হয় (এটি পুনরুত্পাদন করার জন্য সেরা 2 টি 2 সেগ রয়েছে - একটি মডেল এবং একটি ধাক্কা you ট্যাববারটি স্থানের বাইরে রেন্ডার করা দেখুন)। কোড বেলো উভয় সমস্যার সমাধান করে। ভাল কাজ আপেল।

class SafeAreaFixTabBar: UITabBar {

var oldSafeAreaInsets = UIEdgeInsets.zero

@available(iOS 11.0, *)
override func safeAreaInsetsDidChange() {
    super.safeAreaInsetsDidChange()

    if oldSafeAreaInsets != safeAreaInsets {
        oldSafeAreaInsets = safeAreaInsets

        invalidateIntrinsicContentSize()
        superview?.setNeedsLayout()
        superview?.layoutSubviews()
    }
}

override func sizeThatFits(_ size: CGSize) -> CGSize {
    var size = super.sizeThatFits(size)
    if #available(iOS 11.0, *) {
        let bottomInset = safeAreaInsets.bottom
        if bottomInset > 0 && size.height < 50 && (size.height + bottomInset < 90) {
            size.height += bottomInset
        }
    }
    return size
}

override var frame: CGRect {
    get {
        return super.frame
    }
    set {
        var tmp = newValue
        if let superview = superview, tmp.maxY != 
        superview.frame.height {
            tmp.origin.y = superview.frame.height - tmp.height
        }

        super.frame = tmp
        }
    }
}

উদ্দেশ্য-সি কোড:

@implementation VSTabBarFix {
    UIEdgeInsets oldSafeAreaInsets;
}


- (void)awakeFromNib {
    [super awakeFromNib];

    oldSafeAreaInsets = UIEdgeInsetsZero;
}


- (void)safeAreaInsetsDidChange {
    [super safeAreaInsetsDidChange];

    if (!UIEdgeInsetsEqualToEdgeInsets(oldSafeAreaInsets, self.safeAreaInsets)) {
        [self invalidateIntrinsicContentSize];

        if (self.superview) {
            [self.superview setNeedsLayout];
            [self.superview layoutSubviews];
        }
    }
}

- (CGSize)sizeThatFits:(CGSize)size {
    size = [super sizeThatFits:size];

    if (@available(iOS 11.0, *)) {
        float bottomInset = self.safeAreaInsets.bottom;
        if (bottomInset > 0 && size.height < 50 && (size.height + bottomInset < 90)) {
            size.height += bottomInset;
        }
    }

    return size;
}


- (void)setFrame:(CGRect)frame {
    if (self.superview) {
        if (frame.origin.y + frame.size.height != self.superview.frame.size.height) {
            frame.origin.y = self.superview.frame.size.height - frame.size.height;
        }
    }
    [super setFrame:frame];
}


@end

সম্পূর্ণ সমাধান। ধন্যবাদ।
সায়লি পোতে

4
আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ। তবে আপনি কীভাবে এটি কোনও ইউআইটিববারকন্ট্রোলার শ্রেণিতে ব্যবহার করবেন?
জোজো

2
@ জোজো, কোডের মাধ্যমে ট্যাববার স্থাপনের জন্য কত কোডের প্রয়োজন তা প্রদত্ত, আমি সর্বদা স্টোরিবোর্ডগুলি ব্যবহার করে ইউটিববারকন্ট্রোলার তৈরি করি। সেখানে আপনি ট্যাববারের জন্য কাস্টম শ্রেণি নির্ধারণ করতে পারেন। আশাকরি এটা সাহায্য করবে.
রায়মুন্দাস সাকালাউস্কাস

এই সমস্যাটি আসল ডিভাইসে ঘটে না আমি আইফোন 11 প্রো-আইওএস 13 এ এটি পরীক্ষা করে দেখেছি
অক্ষয় যাদব

22

একটি কৌশল আছে যার মাধ্যমে আমরা সমস্যার সমাধান করতে পারি।

আপনার ইউআইটিববারটিকে কেবল একটি ইউআইভিউয়ের ভিতরে রাখুন।

এটি সত্যই আমার পক্ষে কাজ করছে।

অথবা আপনি আরও তথ্যের জন্য এই লিঙ্কটি অনুসরণ করতে পারেন ।


3
এটি দুর্দান্ত কাজ করেছে, একটি ইউভিউউ রয়েছে যাতে কেবল ইউআইটিববার থাকে। ইউআইভিউতে (এল, আর, এবং নীচে) সুরক্ষিত অঞ্চলে সীমাবদ্ধতা রাখুন, এটির উচ্চতা দিন (49), এবং ইউআইটিববারটিকে সমস্ত দিকের ইউআইভিউতে সীমাবদ্ধ করুন।
sdsykes

1
এই সমাধানটি আমার পক্ষে কাজ করেছিল। আমি কোনও ইউআইটিএবিবি নিয়ন্ত্রণকারী ব্যবহার করছিলাম না, কেবল ইউআইটিববার।
রিকার্ডো টেসিও

1
আমার জন্য কাজ করেছেন। ধন্যবাদ
ফ্রেঞ্চিস ল্যান্টিয়ার 25'18

1
এটি আমাকে সাহায্য করেছে! ধন্যবাদ!
গ্লেন

2
এটি কাজ করে তবে তারপরে "অনিরাপদ" অঞ্চলটি ট্যাব বারের মতো একই রঙের নাও হতে পারে (যদি সুপার ভিউ এবং
ট্যাববার

16

UITabBar sizeThatFits(_)SafeArea এর জন্য ওভাররাইড করুন

extension UITabBar {
    static let height: CGFloat = 49.0

    override open func sizeThatFits(_ size: CGSize) -> CGSize {
        guard let window = UIApplication.shared.keyWindow else {
            return super.sizeThatFits(size)
        }
        var sizeThatFits = super.sizeThatFits(size)
        if #available(iOS 11.0, *) {
            sizeThatFits.height = UITabBar.height + window.safeAreaInsets.bottom
        } else {
            sizeThatFits.height = UITabBar.height
        }
        return sizeThatFits
    }
}

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

12

আমি এটিকে viewWillAppearআমার রীতিনীতিতে যুক্ত করেছি UITabBarControllerকারণ প্রদত্ত উত্তরের কোনওটিই আমার পক্ষে কাজ করে নি:

tabBar.invalidateIntrinsicContentSize()
tabBar.superview?.setNeedsLayout()
tabBar.superview?.layoutSubviews()

1
এটি আমাকে ট্যাববারটিকে স্ক্রিনের শীর্ষে নিয়ে যাওয়ার সাথে সম্পর্কিত সমস্যা সমাধান করতে সহায়তা করেছে। ধন্যবাদ!
জয় 1

তবে আমার জন্য নয় :(
নিক

9

আমারও একই সমস্যা ছিল।

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

আমি যদি ইউআইটিববারের নীচের সীমানায় কোনও অ-শূন্য স্থির সেট করে নিরাপদ অঞ্চলে:

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

এটি প্রত্যাশা অনুযায়ী কাজ শুরু করে ...

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

এটিই কেবলমাত্র আমি পরিবর্তন করেছি এবং কেন এটি কাজ করে তা আমার কোনও ধারণা নেই তবে কেউ যদি তা করতে চান তবে আমি তা জানতে চাই।


1
এটি কাজ করার জন্য আমি শেষ পর্যন্ত এটি করেছি, তবে হ্যাঁ এটি কী করছে বা বুঝতে পারে তা আমার কোনও ধারণা নেই। আমার কাছে এটি এখনও বাগের মতো মনে হচ্ছে
এড্রিয়ান চেন

7

নীচে থেকে 1 পয়েন্ট দূরে ট্যাব বারটি সরানো আমার পক্ষে কাজ করেছিল।

অবশ্যই এমনটি করার মাধ্যমে আপনি একটি ফাঁক পাবেন যা আপনাকে কোনওভাবে পূরণ করতে হবে, তবে পাঠ্য / আইকনগুলি এখন সঠিকভাবে অবস্থিত।


7

আহা! এটা আসলে যাদু!

অ্যাপলকে অভিশাপ দেওয়ার কয়েক ঘন্টা পরে অবশেষে আমি এটি আবিষ্কার করেছি।

ইউআইকিট প্রকৃতপক্ষে এটি আপনার জন্য পরিচালনা করে এবং এটি প্রদর্শিত হয় যে স্থানান্তরিত ট্যাব বার আইটেমগুলি ভুল সেটআপের কারণে হয়েছে (এবং সম্ভবত একটি সত্যই ইউআইকিট বাগ)) সাবক্ল্যাসিং বা পটভূমি দেখার দরকার নেই।

ইউআইটিববার নীচে সুরক্ষিত অঞ্চলে নয় , তদারকির নীচে সীমাবদ্ধ থাকলে "" কাজ করবে " ।

এমনকি এটি ইন্টারফেস বিল্ডারেও কাজ করে।

সঠিক সেটআপ

আইবিতে কর্মরত

  1. ইন্টারফেস বিল্ডারে, আইফোন এক্স হিসাবে দেখাতে, একটি ইউআইটিববারটি টানুন যেখানে এটি নীচের নিরাপদ অঞ্চলের ইনসেটে স্ন্যাপ করে। আপনি এটিকে ফেলে দিলে, এটি সঠিক দেখতে হবে (নীচের প্রান্তে সমস্ত স্থান পূরণ করুন)।
  2. তারপরে আপনি একটি "মিসিং সীমাবদ্ধতা" যুক্ত করতে পারেন এবং আইবি সঠিক সীমাবদ্ধতা যুক্ত করবে এবং আপনার ট্যাব বারটি সমস্ত আইফোনে যাদুতে কাজ করবে! (নোট করুন যে নীচের সীমাবদ্ধতার মতো মনে হচ্ছে এটির আইফোন এক্স অনিরাপদ অঞ্চলের উচ্চতার সমান ধ্রুবক মান রয়েছে তবে ধ্রুবকটি আসলে 0)

কখনও কখনও এটি এখনও কাজ করে না

আইবিতে ভাঙা

সত্যিই বোবা কি তা হল আপনি আইবিতে বাগটি তত্ক্ষণিকভাবে দেখতে পাচ্ছেন, এমনকি যদি আপনি উপরের পদক্ষেপগুলিতে আইবি যুক্ত করার মতো সঠিক সীমাবদ্ধতাগুলি যোগ করেন তবে!

  1. একটি ইউআইটিববার টেনে আনুন এবং নীচে নিরাপদ অঞ্চল ইনসেটে স্ন্যাপ করবেন না
  2. শীর্ষস্থানীয়, অনুসরণযোগ্য এবং নীচের সমস্ত সীমাবদ্ধতাগুলি তদারকির জন্য (নিরাপদ অঞ্চল নয়) যুক্ত করুন অদ্ভুতভাবে, আপনি নীচের সীমাবদ্ধতার জন্য সীমাবদ্ধ পরিদর্শকের "রিভার্স ফার্স্ট এবং দ্বিতীয় আইটেম" করেন তবে এটি নিজেকে স্থির করবে। _ (ツ): _ / ¯

নিরাপদ অঞ্চল থেকে তত্ত্বাবধানে এবং কাজ করে সমস্ত বাধা পরিবর্তন করে। কিংবদন্তি রায়ান
RyanTCB

6

SafeAreaInsets প্রয়োগ করতে সাবক্ল্যাসড UITabBar ব্যবহার করে স্থির করা হয়েছে:

class SafeAreaFixTabBar: UITabBar {

    var oldSafeAreaInsets = UIEdgeInsets.zero

    @available(iOS 11.0, *)
    override func safeAreaInsetsDidChange() {
        super.safeAreaInsetsDidChange()

        if oldSafeAreaInsets != safeAreaInsets {
            oldSafeAreaInsets = safeAreaInsets

            invalidateIntrinsicContentSize()
            superview?.setNeedsLayout()
            superview?.layoutSubviews()
        }
    }

    override func sizeThatFits(_ size: CGSize) -> CGSize {
        var size = super.sizeThatFits(size)
        if #available(iOS 11.0, *) {
            let bottomInset = safeAreaInsets.bottom
            if bottomInset > 0 && size.height < 50 {
                size.height += bottomInset
            }
        }
        return size
    }
}

সমস্যার অংশটি সমাধান করে তবে সবকটি নয়। দয়া করে পুরো উত্তরটির
নমুনাটি দেখুন

এটি আমার পক্ষে কাজ করেছিল যখন আমি ভিসিএ উপস্থাপন করার চেষ্টা করি, তারপরে ভিসিএ বরখাস্ত করি, ভিসিবিকে ধাক্কা দেব।
তাই লে

এটি আমার পক্ষে কাজ করে তবে তদারকির জন্য নীচের সীমাবদ্ধতাটি আমার দরকার, নিরাপদ অঞ্চল নয়।
ইয়াজরা

আমি এই নতুন ক্লাসটি তৈরি করার পরে কী করব? আমি ইউআইটিববারের যে কোনও ঘটনার জন্য আমার অ্যাপ্লিকেশনটি সন্ধান করার চেষ্টা করেছি এবং সেফএআরএফিক্সট্যাববারের সাথে তাদের প্রতিস্থাপন করেছি ... আমি এই ঘটনাগুলি পেয়েছি: ফানক অ্যাপ্লিকেশন (_ অ্যাপ্লিকেশন: ইউআইএপ্লিকেশন, ডিফিনিশল্যাঞ্চিং উইথঅপশনস লঞ্চঅ্যাপশনস: [ইউআইএপ্লিকেশনল্যাঞ্চঅপশনগুলি: কোনও]? বিআরএফটিএফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এ.বি.এফ. () .বার্টিন্ট কালার = ... SafeAreaFixTabBar.appearance ()। ব্যাকগ্রাউন্ড কালার = ... SafeAreaFixTabBar.appearance ()। tintColor = ... তবে কিছুই ঠিক করা হয়নি
ব্যবহারকারীর 1019042

4

[tabController.view setNeedsLayout];সম্পূর্ণকরণ ব্লকে মডেলটি খারিজ করার পরে কল করে আমার জন্য সমাধান করা ।

[vc dismissViewControllerAnimated:YES completion:^(){ 
     UITabBarController* tabController = [UIApplication sharedApplication].delegate.window.rootViewController;
     [tabController.view setNeedsLayout];
}];

2

ইউআইটিববার বাড়ির বোতাম / লাইনের ওপরে হতে উচ্চতায় বৃদ্ধি পাচ্ছে তবে সংক্ষিপ্তসারটিকে তার আসল অবস্থানে অঙ্কন করছে এবং সংক্ষিপ্তসারটি থেকে ইউআইটিববার্টিমিটকে ওভারলেল করছে।

কার্যতালিকা হিসাবে আপনি আইফোন এক্স সনাক্ত করতে পারেন এবং তারপরে হোম লাইনের উপরে নিরাপদ জায়গায় ট্যাব বারটি প্রদর্শিত হবে তা নিশ্চিত করতে 32px দ্বারা দৃশ্যের উচ্চতা সঙ্কুচিত করতে পারেন।

উদাহরণস্বরূপ, আপনি যদি নিজের ট্যাববারটি তৈরি করে থাকেন তবে প্রোগ্রামারিকভাবে প্রতিস্থাপন করুন

self.tabBarController = [[UITabBarController alloc] init];
self.window.rootViewController = self.tabBarController;

এর সাথে:

#define IS_IPHONEX (([[UIScreen mainScreen] bounds].size.height-812)?NO:YES)
self.tabBarController = [[UITabBarController alloc] init];    
self.window.rootViewController = [[UIViewController alloc] init] ;
if(IS_IPHONEX)
    self.window.rootViewController.view.frame = CGRectMake(self.window.rootViewController.view.frame.origin.x, self.window.rootViewController.view.frame.origin.y, self.window.rootViewController.view.frame.size.width, self.window.rootViewController.view.frame.size.height + 32) ;
[self.window.rootViewController.view addSubview:self.tabBarController.view];
self.tabBarController.tabBar.barTintColor = [UIColor colorWithWhite:0.98 alpha:1.0] ;
self.window.rootViewController.view.backgroundColor = [UIColor colorWithWhite:0.98 alpha:1.0] ;

দ্রষ্টব্য: ভিউ আকার এবং ট্যাব বারের বিন্যাস ওএস দ্বারা সেট করা হওয়ায় এটি ত্রুটিযুক্ত হতে পারে। এটি সম্ভবত আইফোন এক্স হিউম্যান ইন্টারফেসের গাইডলাইনগুলিতে অ্যাপলের স্ক্রিনশট অনুযায়ী প্রদর্শিত হবে: https://developer.apple.com/ios/human-interface-guidlines/overview/iphone-x/


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

এটি এখন আমার কাছে বাগের মতো আরও অনুভূত হচ্ছে, আমি মনে করি আমি এটি সম্পর্কে একটি বাগ রিপোর্ট করতে যাচ্ছি এবং এটি থেকে কী বেরিয়ে আসে তা দেখুন। আপনার সাহায্যের জন্য ধন্যবাদ!!
অ্যাড্রিয়ান চেন

অ্যাপ্লিকেশনটি আইফোন এক্স এ চলছে কিনা তা নির্ধারণ করতে মূল পর্দার সীমার সঠিক উচ্চতা ব্যবহার করা সত্যিই দুর্দান্ত ধারণা নয় next পরের বছরের মডেলটি একই পয়েন্ট সাইজের হলে কী হবে? বা যদি অ্যাপটি ল্যান্ডস্কেপ মোডে চলছে?
রোপার্ক্ল্যাকস

স্বচ্ছতা আমার আইকনগুলিকে ভুলভাবে সেট করা প্রভাবিত করছে বলে মনে হচ্ছে না। ইউআইটিববারটি অস্বচ্ছ বা স্বচ্ছ কিনা তা তারা গণ্ডগোল করছে।
আদামা

এটি প্রদর্শিত হবে যে আপনি প্রকৃতপক্ষে ফ্রেমটি থেকে বিয়োগের পরিবর্তে 32px যুক্ত করছেন?
পেরি 21

2

আমার কেসটি হ'ল যে আমি আমার ইউআইটিববারকন্ট্রোলারে একটি কাস্টম ইউআইটিববার উচ্চতা নির্ধারণ করেছি:

  override func viewWillLayoutSubviews() {            
        var tabFrame = tabBar.frame
        tabFrame.size.height = 60
        tabFrame.origin.y = self.view.frame.size.height - 60
        tabBar.frame = tabFrame
    }

এই কোডটি সরিয়ে ফেলাটাই ছিল ট্যাববারের জন্য আইফোন এক্স-তে সঠিকভাবে প্রদর্শন করার সমাধান the


2

আমি যে সহজ সমাধানটি পেয়েছি তা হ'ল ট্যাব বারের নীচে এবং সেফআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআ।

tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -0.2)

1

আমি যখন আমার কাস্টম ট্যাববারকন্ট্রোলারের মধ্যে ইউআইটিববারের ফ্রেমটি সেট করার চেষ্টা করছিলাম তখন আমার একই সমস্যা ছিল।

self.tabBar.frame = CGRectMake(0, self.view.frame.size.height - kTabBarHeight, self.view.frame.size.width, kTabBarHeight);

আমি যখন এটিকে নতুন আকারে সামঞ্জস্য করেছি তখন সমস্যাটি চলে গেল

if(IS_IPHONE_X){
    self.tabBar.frame = CGRectMake(0, self.view.frame.size.height - kPhoneXTabBarHeight, self.view.frame.size.width, kPhoneXTabBarHeight);
}
else{
    self.tabBar.frame = CGRectMake(0, self.view.frame.size.height - kTabBarHeight, self.view.frame.size.width, kTabBarHeight);
}

1
এর মান কি kPhoneXTabBarHeight ?
টিয়াগো ভেলোসো

আমি কেবল কেটিববারহাইটের পূর্বের মানটিতে 32 পয়েন্ট যুক্ত করেছি (যা 45 ছিল)। তবে আপনাকে ঠিক একই মানটি নির্দিষ্ট করতে হবে না, আমার জন্য এটি ট্যাববারের জন্য ফ্রেম নির্দিষ্ট না করেও ঠিক কাজ করে। কিন্তু আপনি যদি এটা উল্লেখ করেন, তখন আপনাকে আইফোন এক্স অতিরিক্ত উচ্চতার জন্য সমন্বয় আছে
Evgeny

1
মোট হ্যাক, তবে এই সমাধানগুলির মধ্যে এটিই ছিল যে এটি আমার জন্য সঠিক দেখাচ্ছে।
কেনি ওয়াইল্যান্ড

আপনি যখন আপনার ট্যাববার হিসাবে একটি কাস্টম দর্শন পেয়েছেন আপনি আইফোন এক্স এর জন্য আপনার কাস্টম
ভিউটিকে

1
@ হেমং না, এই প্রকল্পের জন্য এটি 45 ছিল আমি এই কোডটি ধার করেছিলাম।
ইভজেনি

1

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


আমার পক্ষে কাজ করেনি। আমি একটি ইউআইটিববার ব্যবহার করছিলাম যা ম্যানুয়ালি পাশাপাশি যুক্ত করা হয়েছিল।
কেনি ওয়াইল্যান্ড

1

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

- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
    if (DEVICE_IS_IPHONEX())
    {
        [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
            for (UIView *view in self.tabBar.subviews)
            {
                if ([NSStringFromClass(view.class) containsString:@"UITabBarButton"])
                {
                    if (@available (iOS 11, *))
                    {
                        [view.bottomAnchor constraintEqualToAnchor:view.superview.safeAreaLayoutGuide.bottomAnchor].active = YES;
                    }
                }
            }
        } completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
            [self.tabBar layoutSubviews];
        }];
    }
}

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

দয়া করে লেমমে জানুন যে এটি কাজ করে কিনা, পরামর্শ এবং উন্নতির জন্য উন্মুক্ত হবে!

এটির জন্য একটি দ্রুত সমতুল্য তৈরি করা সহজ হওয়া উচিত।


আমি এটি viewDidAppear(animated:)আমার মধ্যে রেখেছি UITabBarControllerএবং এটি দুর্দান্ত কাজ করেছে। ধন্যবাদ!
অ্যালবার্ট বোরি

1
আপনি কি পরম আকার এবং সমন্বয়কারী পাস? দৃশ্য didAppear থেকে
সুলভ

1

এই টিউটোরিয়াল থেকে:

https://github.com/eggswift/ESTabBarController

এবং ট্যাব বার প্রারম্ভিক ক্লাসে এই লাইনটি লিখতে শুরু করার পরে

(self.tabBarController.tabBar as? ESTabBar)?.itemCustomPositioning = .fillIncludeSeparator

আমার ট্যাব বারের সমস্যা সমাধান করে।

আশা করি এটি আপনার সমস্যার সমাধান করে

ধন্যবাদ


1

ট্যাববারটি নির্বাচন করুন এবং ইন্সপেক্টর এডিটরটিতে "সেভ এরিয়া রিলেটিভ মার্জিনস" চেকবাক্সটি সেট করুন:

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


1

আমার একই রকম সমস্যা ছিল, প্রথমে এটি সঠিকভাবে রেন্ডার করা হয়েছিল তবে badgeValueট্যাববার্ট আইটেমের একটিতে সেটআপ করার পরে এটি বিন্যাসটি ভেঙে গেছে। সাবক্ল্যাসিং ছাড়াই এটি আমার পক্ষে কী কাজ করেছিল তা UITabBarআমার ইতিমধ্যে তৈরি UITabBarControllerসাবক্লাসে।

-(void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    NSLayoutYAxisAnchor *tabBarBottomAnchor = self.tabBar.bottomAnchor;
    NSLayoutYAxisAnchor *tabBarSuperviewBottomAnchor = self.tabBar.superview.bottomAnchor;
    [tabBarBottomAnchor constraintEqualToAnchor:tabBarSuperviewBottomAnchor].active = YES;
    [self.view layoutIfNeeded];
}

সীমাবদ্ধতা / অ্যাঙ্করগুলি একই ভিউ হায়ারার্কিতে রয়েছে এবং ক্র্যাশগুলি এড়ায় তা নিশ্চিত করতে আমি ট্যাববার সুপারভাইউ ব্যবহার করেছি।

আমার বোঝার উপর ভিত্তি করে, যেহেতু এটি ইউআইকিট বাগ হিসাবে মনে হচ্ছে, আমাদের কেবলমাত্র ট্যাব বারের সীমাবদ্ধতাগুলি পুনরায় লিখতে / পুনরায় সেট করতে হবে যাতে স্বয়ংক্রিয় বিন্যাস ইঞ্জিনটি ট্যাব বারটিকে আবার সঠিকভাবে বিন্যাস করতে পারে।


0

আপনার যদি ট্যাব বারের জন্য কোনও উচ্চতার সীমাবদ্ধতা থাকে তবে এটি সরিয়ে দেওয়ার চেষ্টা করুন।

একই সমস্যার মুখোমুখি হয়েছে এবং এটি সমস্যার সমাধান করেছে removing


0

আমি আমার স্টোরিবোর্ডে নতুন ইউআইটিববারকন্ট্রোলার তৈরি করেছি এবং সমস্ত দৃশ্যের নিয়ামককে এই নতুন ইউআইটিববারকন্টোল্টারে ঠেলে দিয়েছি। সুতরাং, আইফোন এক্স সিমুলেটারে সমস্ত ভাল কাজ করে।


এটি আমার জন্য এটি স্থির করে দিয়েছে। এক্সকোড 9 আইবি যেভাবে ইউআইটিববারকন্ট্রোলারের এক্সএমএল তৈরি করেছে তা সম্পর্কে আলাদা কিছু রয়েছে যা সমস্যার সমাধান করেছে।
টিয়াগো

0

আইফোনের জন্য আপনি এটি করতে পারেন, সাবক্লাস UITabBarController।

class MyTabBarController: UITabBarController {

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    if #available(iOS 11, *) {
        self.tabBar.heightAnchor.constraint(equalToConstant: 40).isActive = true
        self.tabBar.invalidateIntrinsicContentSize()
    }
  }
}

স্টোরিবোর্ডে যান এবং নিরাপদ অঞ্চল লেআউট গাইড এবং ইউআইটিববারকন্ট্রোলারের শ্রেণি পরিবর্তন করার অনুমতি দিন MyTabBarController

পিএস এই সমাধানটি সর্বজনীন অ্যাপ্লিকেশন এবং আইপ্যাডের ক্ষেত্রে পরীক্ষা করা হয় না।


0

@ 3x আকারের (3726 × 6624) স্প্ল্যাশ স্ক্রিনটি পরিবর্তন করার চেষ্টা করুন


আমরা যদি একটি লঞ্চস্ক্রিন স্টোরিবোর্ড ব্যবহার করি?
অবনীত গুপ্ত

ঠিক আছে কেবল স্প্ল্যাশ নতুন আকারটি ব্যবহার করুন
সোব

0

আমার জন্য, [self.tabBar setBackgroundImage:]কাজ সরান , সম্ভবত এটি ইউআইকিট বাগ রয়েছে


0

আমার জন্য এটি সমস্ত সমস্যার সমাধান করেছে:

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let currentHeight = tabBar.frame.height
        tabBar.frame = CGRect(x: 0, y: view.frame.size.height - currentHeight, width: view.frame.size.width, height: currentHeight)
    }

0

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

আমার জন্য, স্থিরতাটি ছিল UITabBarControllerস্টোরিবোর্ড থেকে বিদ্যমানটিকে মুছে ফেলা এবং ইন্টারফেস নির্মাতা অবজেক্ট লাইব্রেরি থেকে এটিকে টেনে নিয়ে পুনরায় তৈরি করা ।


0

যারা পুরো UITabBarControllerপ্রোগ্রামটিমেটিকভাবে লেখেন , আপনি তাদের ব্যবহার করতে পারেনUITabBarItem.appearance().titlePositionAdjustment শিরোনামের অবস্থানটি সামঞ্জস্য

সুতরাং এই ক্ষেত্রে আপনি আইকন এবং শিরোনামের মধ্যে একটি ব্যবধান যুক্ত করতে চান এটি এতে ব্যবহার করুন viewDidLoad:

    override func viewDidLoad() {
        super.viewDidLoad()

        // Specify amount to offset a position, positive for right or down, negative for left or up
        let verticalUIOffset = UIOffset(horizontal: 0, vertical: hasTopNotch() ? 5 : 0)

        UITabBarItem.appearance().titlePositionAdjustment = verticalUIOffset
    }

ডিভাইসে খাঁজ স্ক্রিন রয়েছে কিনা তা সনাক্ত করছে:

  func hasTopNotch() -> Bool {
      if #available(iOS 11.0, tvOS 11.0, *) {
        return UIApplication.shared.delegate?.window??.safeAreaInsets.top ?? 0 > 20
      }
      return false
  }

-1

আমার একই সমস্যা ছিল যা ট্যাববারটি সরিয়ে দেওয়ার পরে ট্যাববারের আইটেমগুলি সেট করে সমাধান করা হয়েছিল।

আমার ক্ষেত্রে বিষয়টি যখন ঘটেছিল:

  1. একটি কাস্টম ভিউ কন্ট্রোলার রয়েছে
  2. ভিউ কন্ট্রোলারের ইনিশিয়ালাইজারে একটি ইউআইটিববার তৈরি করা হয়
  3. ট্যাব বার আইটেমগুলি প্রদর্শন লোড করার আগে সেট করা হয়
  4. দেখুন লোড লোড ট্যাব বারটি ভিউ কন্ট্রোলারের মূল দৃশ্যে যুক্ত করা হয়
  5. তারপরে, আপনার উল্লেখ অনুসারে আইটেমগুলি রেন্ডার করা হবে।

-1

আমি মনে করি এটি আইফোনএক্সের একটি বাগ ইউআইকিট। কারণ এটি কাজ করে:

if (@available(iOS 11.0, *)) {
    if ([UIApplication sharedApplication].keyWindow.safeAreaInsets.top > 0.0) {
       self.tabBarBottomLayoutConstraint.constant = 1.0;
    }
} 

আপনি কি ট্যাববারটমলআউটআউটকন্ট্রেন্টটি আরও তথ্য দিতে পারেন?
ব্যবহারকারী 3099837

-1

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

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