Tweetbotのタブバーの高さと同様に、ストックUITabBarの高さを44pxに変更しようとしています。他にもいくつかのアプリがこれを行うのを見たことがあります。
しかし、私が高さを設定しようとすると、それはまだ同じままです
self.tabBar.frame.height = 40
タブバーの高さを変更することはできませんか?もしそうなら、良い代替手段は何ですか?ツールバーを使用していますか?
上記のSomeGuyの答えは私のために働きました。 Swift必要な人のための翻訳です。最も人気のあるアプリが使用していると思われる高さに近づけました。
class TabBar: UITabBar {
override func sizeThatFits(size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 38
return sizeThatFits
}
}
誰もがこれは簡単にはできないと言っているようです
ストーリーボードで、UITabBarにカスタムサブクラス名を付け、次のようにサブクラスを実装します。
これは、タブバーを使用するすべてのビューに、特定の高さでなければならないことを伝えます。
@implementation MyTabBar
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = 100;
return sizeThatFits;
}
@end
Swift 3およびxcode 8の場合
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 80 // adjust your size here
return sizeThatFits
}
}
Swiftでは、UITabBarの拡張機能を使用することにより、上記で提案されたすべてのソリューションよりも簡単で、サブクラス化は必要ありません。
extension UITabBar {
override public func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = <Insert your height here>
return sizeThatFits
}
}
あなたのUITabBarController
- (void)viewWillLayoutSubviews {
CGRect tabFrame = self.tabBar.frame;
tabFrame.size.height = 80;
tabFrame.Origin.y = self.view.frame.size.height - 80;
self.tabBar.frame = tabFrame;
}
自動レイアウトを有効にしている場合は、代わりにinstrinsicContentSizeをオーバーライドする必要があります
intelligentContentSizeおよびsizeThatFitsの適切な使用法:autolayoutを使用したUIViewサブクラス
class TabBar: UITabBar {
override func intrinsicContentSize() -> CGSize {
var intrinsicSize = super.frame.size
intrinsicSize.height = 120
return intrinsicSize
}
}
開発者はtabBarを所有していませんが、フレームワークは所有しています。 tabBarが同じ高さを維持することを確認するために戦います。これを回避したい場合は、独自のツールバーを作成し、その高さにautlayout制約を追加して、好きな高さに留まらせることができます。
あなたがiOS 11を使用している場合は、以下が役立ちます
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = 60;
if (@available(iOS 11.0, *)) {
UIWindow *window = UIApplication.sharedApplication.keyWindow;
CGFloat bottomPadding = window.safeAreaInsets.bottom;
sizeThatFits.height += bottomPadding;
}
return sizeThatFits;
}
基本的に安全な領域をカバーする必要があります。それ以外の場合、iPhone Xのタブバーの高さは低く見えます。