iOS 11 iPhone XシミュレーターUITabBarアイコンとタイトルが互いに重なり合うようにレンダリングされる


134

UITabBarコンポーネントの周りでiPhone Xシミュレータに問題がある人はいますか?

鉱山はアイコンとタイトルを重ねてレンダリングしているようですが、何も欠落しているかどうかはわかりません。iPhone8シミュレータでも実行しました。実際のデバイスの1つは、ストーリーボード。

iPhone X:

iPhone X UITabBarバグ

iPhone 8

iPhone 8 UITabBarが機能する


1
マイ同様の問題:iPhone X.で16点程度タブバービューで選択のインジケータ画像表示シンク
イタチ

FYI-これは残念ながらXcode 9.2betaでは修正されていません
tdios

これはまだ存在するuikitバグです。制約は適切に設定する必要があります。以下の私の答えを見てください!
RyanM

私はこの答えを確認のような問題だったstackoverflow.com/a/53524635/5441253
マキシムAshurov

回答:


40

私は、viewDidLayoutSubviewsのUITabBarでinvalidateIntrinsicContentSizeを呼び出すだけで問題を回避できました。

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

注:タブバーの下部は、安全領域ではなくメインビューの下部に収まる必要があり、タブバーには高さの制約がないはずです。


高さ制限のないタブバーがあり、下部レイアウトガイドに制限されていますが、これはうまくいきませんでした。他のアイデアはありますか?
ケニーワイランド2017年

1
homeVCがVC Aを提示し、Aを終了し、VC BをhomeVCからプッシュすると、機能しなくなります。これは、回避策ですstackoverflow.com/a/47225653/1553324
メールで送信

1
この方法を追加し、タブバーをそのスーパービューの下部(安全領域ではない)に固定することでうまくいきました。
ドリューC

3
私も追加する必要がありました[self.view layoutIfNeeded]
Iulian Onofrei 2017

1
これは機能しますが、タブバーボタンの画像のサイズにも注意を払う必要があることを学びました。横向きモード(iPadおよびiPhone Plusモデルではなくコンパクトデバイス)では、システムはコンパクトなタブバーを使用しlandscapeImageます。このタブバーには、タブバーボタンのプロパティで設定できる小さい画像が表示されます。推奨サイズは[Apple HIG's](developer.apple.com/design/human-interface-guidelines/ios/…)のCustom Icon Size
RobP

25

VoidLessが提供する回答は、TabBarの問題を部分的にしか修正しません。タブバー内のレイアウトの問題を修正しますが、タブバーを非表示にするビューコントローラーを使用すると、アニメーション中にタブバーが正しくレンダリングされません(再現するには、2つのセグエがあり、1つのモーダルと1つのプッシュが最適です。セグエを交互にすると、正しく配置されていないタブバーを参照してください)。次のコードは両方の問題を修正します。よくできました。

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
        }
    }
}

Objective-Cコード:

@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

完全なソリューション。ありがとう。
Sayalee Pote 2018

4
お返事ありがとうございます。しかし、それをUITabBarControllerクラスでどのように使用しますか?
ジョジョ

2
@Jojo、コードを介してタブバーを生成するために必要なコードの量を考えると、ストーリーボードを使用してuitabbarcontrollerを常に作成します。そこで、タブバーにカスタムクラスを割り当てることができます。お役に立てれば。
Raimundas Sakalauskas

この問題は実際のデバイスでは発生しませんiPhone11プロiOS 13でテストしました
Akshay Jadhav

22

私たちが問題を解決できるトリックがあります。

UITabBarをUIView内に配置するだけです。

これは本当に私のために働いています。

または、このリンクから詳細を確認できます。


3
これはうまくいき、単にUITabBarを含むuiviewを持っています。UIView(L、R、およびBottom)の安全な領域に制約を設定し、高さ(49)を指定して、UITabBarをすべての面でUIViewに制約します。
sdsykes 2017

1
この解決策は私にとってうまくいきました。UITabControllerを使用せず、UITabBarのみを使用しました。
Riccardo Tesio

1
私のために働いた。ありがとう
フランシスランティエ2018年

1
これは私を助けました!ありがとうございました!
Glenn、

2
これは機能しますが、「安全でない」領域はタブバーと同じ色ではない可能性があります(スーパービューとタブバーが同じ色でない場合)
iDev

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
    }
}

鮮やかさ。タブバーのカスタムサイズを設定したところ、なぜiPhoneXで機能しないのか疑問に思いました。Tab Bar Controllerを使用していて、制約が含まれていないため、他のソリューションは機能しません。
JindřichRohlík

12

提供された回答がどれも私にとってうまくいかなかったのでviewWillAppear、これを私のカスタムに追加UITabBarControllerしました:

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

1
これは、tabBarを画面の上部に移動することに関連する問題を修正するのに役立ちました。ありがとうございました!
ジェイ

しかし、私にはありません:(
Nick

9

同じ問題がありました。

ここに画像の説明を入力してください

UITabBarの下部制約にゼロ以外の定数を安全領域に設定した場合:

ここに画像の説明を入力してください

期待どおりに動作し始めます...

ここに画像の説明を入力してください

それが私が行った唯一の変更であり、なぜそれが機能するのかはわかりませんが、誰かがそうしたいと思ったら知りたいです。


1
これは私が最後にそれを機能させるためにやったことでしたが、ええ、それがなぜなのか、それが何をしているのか理解できません。私にはそれはまだバグのように感じられます
adrian chen

7

タブバーを下から1ポイント移動するとうまくいきました。

もちろん、そうすることでギャップが生じますが、これは何らかの方法で埋める必要がありますが、テキスト/アイコンは適切に配置されています。


7

ああ!それは実際には魔法です!

何時間もAppleをののしった後、ようやくこれを理解した。

UIKitは実際にこれを処理します。シフトされたタブバー項目は、セットアップが正しくないために発生しているようです(おそらく実際のUIKitバグ)。サブクラス化や背景ビューは必要ありません。

UITabBarは、下部のセーフエリアではなく、スーパービューの下部に制約されている場合に「機能する」だけです。

インターフェースビルダーでも動作します。

正しいセットアップ

IBで働く

  1. インターフェイスビルダーで、iPhone Xとして表示し、UITabBarを下のセーフエリアインセットにスナップする場所までドラッグします。ドロップすると、正しく見えます(スペースを下端まで埋めます)。
  2. その後、「不足している制約を追加」を実行すると、IBが正しい制約を追加し、タブバーがすべてのiPhoneで魔法のように機能します。(下部の制約はiPhone Xの安全でない領域の高さに等しい定数値を持っているように見えますが、定数は実際には0であることに注意してください)

時々それはまだ機能しません

IBで破損

本当にばかげているのは、上記の手順でIBが追加した制約を正確に追加した場合でも、IBのバグも実際に確認できることです。

  1. UITabBarをドラッグアウトし、それを下のセーフエリアインセットにスナップしないでください。
  2. 先頭、末尾、および下部の制約をすべてスーパービューに追加します(安全領域ではありません)奇妙なことに、下部の制約の制約インスペクターで「最初と2番目の項目を反転」を実行すると、これは自動的に修正されます。¯_(ツ)_ /¯

すべての制約を安全領域からスーパービューに変更して機能しました。レジェンドライアン
RyanTCB 2018年

6

サブクラス化されたUITabBarを使用してsafeAreaInsetsを適用することで修正:

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
    }
}

問題の一部を解決しますが、すべてを解決するわけではありません。以下の完全な回答を参照してください
Raimundas Sakalauskas

VCAを提示してVCAを却下し、VCBをプッシュしようとすると、うまくいきました。
Tai Le

これは私にとってはうまくいきますが、安全な領域ではなく、スーパービューに下部の制約を設定する必要があります。
yajra 2018

この新しいクラスを作成した後、どうすればよいですか?アプリケーションでUITabBarの発生を調べて、SafeAreaFixTabBarに置き換えてみました...これらの発生を見つけました:func application(_ application:UIApplication、didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)-> Bool {SafeAreaFixTabBar.appearance ().barTintColor = ... SafeAreaFixTabBar.appearance()。backgroundColor = ... SafeAreaFixTabBar.appearance()。tintColor = ...しかし、何も修正されませんでした
user1019042

4

[tabController.view setNeedsLayout];完了ブロックでモーダルを閉じた後に電話をかけて解決しました。

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

2

UITabBarは高さが増加してホームボタン/ラインの上にありますが、サブビューを元の場所に描画し、サブビューの上にUITabBarItemをオーバーレイします。

回避策として、iPhone Xを検出し、ビューの高さを32px縮小して、タブバーがホームラインの上の安全な領域に表示されるようにします。

たとえば、プログラムでTabBarを作成している場合は、

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] ;

注:ビューサイズとタブバーのレイアウトはOSによって設定されるため、これはバグである可能性があります。iPhone XヒューマンインターフェイスガイドラインのAppleのスクリーンショットに従って表示されるはずです:https : //developer.apple.com/ios/human-interface-guidelines/overview/iphone-x/


1
わかりました。プログラムでタブバーを作成していません。ストーリーボードを使用して、画面の下部に設定された制約を使用して作成しました。iPhone Xであるかどうかを検出し、レイアウトを再調整しなければならないのは奇妙に感じますが、コードを変更することなく、TabBarの高さを自分で調整するだけです。
adrian chen

これは今ではバグのように感じられます。これについてバグレポートを作成し、何が出てくるかを確認するつもりです。ご協力いただきありがとうございます!!
エイドリアンチェン

メイン画面の境界の正確な高さを使用して、アプリがiPhone Xで実行されているかどうかを判断することは、あまり良い考えではありません。来年のモデルが同じポイントサイズである場合はどうなりますか?または、アプリが横向きモードで実行されている場合は?
roperklacks

透明度は、アイコンの不適切な設定に影響しないようです。UITabBarが不透明か透明かに関係なく、それらはめちゃくちゃです。
アダマ2017

フレームから差し引くのではなく、実際にフレームの高さに32pxを追加しているように見えますか?
ペリー

2

私の場合は、次のように、UITabBarControllerでカスタムUITabBarの高さを設定した場合です。

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

このコードを削除することで、TabBarがiPhone Xで正しく表示されるようになりました。


2

私が見つけた最も簡単な解決策は、タブバーの下部とsafeAreaLayoutGuide.bottomAnchorの下部の間に0.2 ptのスペースを単に追加することでした。

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

1

カスタムTabBarControllerでUITabBarのフレームを設定しようとしたときにも、同じ問題が発生していました。

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 何ですか?
Tiago Veloso 2017

以前のkTabBarHeightの値(45)に32ポイントを追加しました。しかし、まったく同じ値を指定する必要はありません。私にとっては、tabBarのフレームを指定しなくても問題なく機能します。あなたはそれを指定した場合しかし、あなたはiPhone X上の追加の高さを調整する必要がある
エフゲニー・

1
完全なハックですが、私にとってそれを正しく見せる唯一のソリューションでした。
ケニーワイランド2017年

あなたのタブバーなどのカスタムビューを持っているとき、あなたはiPhone X用のカスタムビューフィットするために、このハックを使用したい
Hemang

1
@Hemangいいえ、このコードを借用したこのプロジェクトでは45でした。
Evgeny

1

今日、ストーリーボードのビューコントローラーにUITabBarを手動で追加してこれに遭遇しました。定数0でセーフエリアの下部に揃えると問題が発生しますが、1に変更すると問題が解決します。私のアプリケーションでは、UITabBarを通常よりも1ピクセル大きくすることで問題ありません。


私のために働いていませんでした。手動で追加されたUITabBarも使用していました。
ケニーワイランド2017年

1

私はこの問題に頭を悩ませた。これは、tabBarがどのように初期化され、ビュー階層に追加されるかに関連付けられているようです。またinvalidateIntrinsicContentSize、の呼び出し、フレームの設定、bottomInsetsUITabBarサブクラスの内部など、上記の解決策も試しました。ただし、一時的に機能するように見え、他のシナリオに違反したり、あいまいなレイアウトの問題を引き起こしてタブバーを元に戻したりします。問題をデバッグしているときに、UITabBarとcenterYAnchorに高さの制約を割り当てようとしましたが、どちらも問題を修正しませんでした。ビューデバッガーで、問題が再現される前後にtabBarの高さが正しいことに気付き、問題はサブビューにあると思いました。以下のコードを使用して、他のシナリオを回避せずにこの問題を正常に修正しました。

- (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];
        }];
    }
}

前提:現在、他のデバイスでは再生されないようなので、これはiPhone Xに対してのみ実行しています。Appleが将来のiOSリリースでUITabBarButtonクラスの名前を変更しないという仮定に基づいています。UITabBarButtonでこれを行うのは、アップルがUITabBarに内部サブビューをさらに追加する場合に、コードを変更して調整する必要がある場合に限られます。

これが機能するかどうかを教えてください、提案や改善を受け入れる予定です!

これに対応する迅速なものを作成するのは簡単です。


私は、これを入れてviewDidAppear(animated:)、私の中でUITabBarController、それは罰金を働きました。ありがとう!
Albert Bori 2017年

1
どのパラメーターuがサイズとコーディネーターを渡しましたか?ビューdidAppearから
sulabh

1

このチュートリアルから:

https://github.com/eggswift/ESTabBarController

タブバーの初期化後、appdelegateクラスにこの行を書き込みます

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

タブバーの問題を解決します。

問題が解決することを願っています

ありがとう


1

タブバーを選択し、インスペクタエディタで「エリア相対マージンを保存」チェックボックスを次のように設定します。

ここに画像の説明を入力してください


1

私も同様の問題がありましたが、最初は正しくレンダリングされましたがbadgeValue、tabBarItemの1つで設定した後、レイアウトが壊れました。サブクラス化せずに機能したの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];
}

tabBarスーパ​​ービューを使用して、制約/アンカーが同じビュー階層にあることを確認し、クラッシュを回避しました。

私の理解に基づくと、これはUIKitのバグのようですので、自動レイアウトエンジンがタブバーを正しくレイアウトできるように、タブバーの制約を書き換える/再設定する必要があります。


0

タブバーに高さの制約がある場合は、削除してみてください。

同じ問題に直面し、これを削除すると問題が解決しました。


0

ストーリーボードに新しいUITabBarControllerを作成し、すべてのビューコントローラーをこの新しいUITabBarConttollerにプッシュしました。したがって、すべてiPhone Xシミュレータでうまく機能します。


これで修正されました。Xcode 9 IBが問題を修正したUITabBarControllerのXMLを生成する方法には、いくつか異なる点があります。
ティアゴ

0

iPhoneの場合、これを行うことができます、サブクラスUITabBarController。

class MyTabBarController: UITabBarController {

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

ストーリーボードに移動して、セーフエリアレイアウトガイドの使用を許可し、UITabbarControllerのクラスをMyTabBarControllerに変更します。

PSこのソリューションは、ユニバーサルアプリケーションとiPadの場合はテストされていません。


0

@ 3xサイズのスプラッシュスクリーンを変更してみてください(3726×6624)


LaunchScreenストーリーボードを使用している場合はどうなりますか?
Avineet Gupta

新しいサイズのスプラッシュを使用するだけで
十分

0

私にとっては、[self.tabBar setBackgroundImage:]仕事を削除してください、おそらくUIKitのバグです


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ストーリーボードでを使用していましたが、最初は問題なく機能していましたが、新しいXcodeバージョンにアップグレードした後、tabBarの高さに関連する問題が発生し始めました。

私にとっての修正は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

同じ問題がありましたが、タブバーが配置された後にtabBarの項目を設定することで解決しました。

私の場合、問題は次の場合に発生しました:

  1. カスタムView Controllerがあります
  2. UITabBarは、ビューコントローラーの初期化子で作成されます。
  3. タブバー項目は、ビューがロードされる前に設定されます
  4. ロードされたビューでは、タブバーがビューコントローラーのメインビューに追加されます
  5. その後、あなたが言うようにアイテムがレンダリングされます。

-1

これはiPhoneXのバグUIKitだと思います。それが機能するので:

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

tabBarBottomLayoutConstraintが何であるかについての詳細情報を提供できますか?
user3099837

-1

下のセーフレイアウトガイドに対してタブバーをレイアウトしていると思います。タブバーはiPhone Xのホームラインの上に安全にタブバーアイテムを配置するために独自の計算を行うため、これはおそらく望んでいることではありません。スーパービューの下部に対して下部の制約を設定してくださいiPhone Xや他のiPhoneでも正しくレイアウトされるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.