まず第一に、ここに来てくれてありがとう、そして私の問題を解決するのを手伝ってください。ありがとうございました!!!
IOS11 beta6では、sizeThatFits:
はUINavigationBarでは機能しないようです。アプリの公開によってUINavigationBarの構造が変更されたことに気付きました。
カスタムナビゲーションバーの高さを変更するために最善を尽くしました。ただし、常に44
、およびiOS11より前に動作します。
- (CGSize)sizeThatFits:(CGSize)size {
CGSize newSize = CGSizeMake(self.frame.size.width, 64);
return newSize;
}
奇妙なことに、フレームをdidMoveToSuperview
メソッドで記録するだけで、その高さは64ですが、Revealとappでは44であることが実際にわかります。
これについてはわからない...助けてください。ありがとう。
私のカスタムナビゲーションバーについて、LayoutConstraintsはコンソールに次のようにログインすることがわかりました:
"<NSAutoresizingMaskLayoutConstraint:0x604000495ae0 FDCustomNavigationBar:0x7fe2f01399d0.(null) == 42>",
"<NSAutoresizingMaskLayoutConstraint:0x604000495b30 FDCustomNavigationBar:0x7fe2f01399d0.height == 44>"`
バグ、ナビゲーションバーで自動レイアウトを使用していません。どうしたの?
カスタムナビゲーションバーのサブビューフレームをナビゲーションバーの- layoutSubviews
方法。
- (void)layoutSubviews {
[super layoutSubviews];
self.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), 64);
for (UIView *view in self.subviews) {
if([NSStringFromClass([view class]) containsString:@"Background"]) {
view.frame = self.bounds;
} else if ([NSStringFromClass([view class]) containsString:@"ContentView"]) {
CGRect frame = view.frame;
frame.Origin.y = 20;
frame.size.height = self.bounds.size.height - frame.Origin.y;
view.frame = frame;
}
}
}
ただし、ナビゲーションバーはView Controllerのビューを覆います。どうすれば修正できますか?
IOS 11 UINavigationBarは自動レイアウトを完全にサポートしているため(これが制約を確認している理由です)。 Appleにレーダーを開いたのは、titleViewに高さの制約を設定すると、それに応じてナビゲーションバーの高さが調整されると考えたためです。ただし、これはApple =返信済み:
自動レイアウトの完全なサポートは、ビューがナビゲーションバーのレイアウトの他の側面に影響を与えることを意味しません。特に、ナビゲーションバーは独自の高さを強制し、タイトルビューまたは他のカスタムビューが高さを超えないようにしますナビゲーションバー。この問題については引き続き作業を進めており、再度フォローアップを行います。
今日現在、レーダーはまだ開いています。
こんにちは、私はちょうどこの同じ問題を経験しました。
IOS 11では、最上位のレイアウトガイドが廃止されました。制約でsafeAreaLayoutGuideを参照する必要があります。
Swiftの例を次に示します
if #available(iOS 11, *) {
let guide = self.view.safeAreaLayoutGuide.topAnchor
let height = (self.navigationController?.navigationBar.frame.height)! - CGFloat(12)
NSLayoutConstraint.activate([
self.yourTableView.topAnchor.constraint(equalTo: guide, constant: height)
])
}
ご覧のとおり、ビューのトップアンカーはsafeAreaLayoutGuideトップアンカーと一致する必要があります。この例では、可変の高さを使用して新しい制約を作成しています。変数heightには、ナビゲーションバーの高さから定数を引いた値が含まれます。
高さの値を変更してみてください。
これがお役に立てば幸いです。