私はアプリでUITabbarを使用しています。 UITabbarの上部に上部境界線があります。下の画像を参照してください:-
私はそれをグーグルで検索し、次のような提案されたコードを試しました:-
[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
また
[[UITabBar appearance] setShadowImage:nil];
self.navigationController.toolbar.clipsToBounds = YES;
しかし、それらのどれも機能していません。解決策はありますか?
[self.tabBar setValue:@(YES) forKeyPath:@"_hidesShadow"];
またはあなたが使用することができます
[[UITabBar appearance] setShadowImage:[UIImage imageNamed:@"transparentShadow.png"]];
または
[[UITabBar appearance] setShadowImage:nil];
tabBar.clipsToBounds = YES;
は私のための仕事です。
これはiOS11、XCode9.4でうまくいきました
UITabBar.appearance().shadowImage = UIImage()
UITabBar.appearance().backgroundImage = UIImage()
UITabBar.appearance().backgroundColor = UIColor.white
Swift5は私のために働きます
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
myTabBar.clipsToBounds = true
}
上記の答えの1つを改善する-それでも少しハックですが、うまく機能します。上記の答えは、カスタム画像でimageViewを非表示にします。
for tabBarSubview in self.tabBar.subviews {
let tabBarSubviewName = String(describing: type(of: tabBarSubview))
guard tabBarSubviewName == "_UIBarBackground" else { continue }
tabBarSubview.clipsToBounds = true
}
UITabbarから境界線を削除するには、次の2行のコードのみを追加する必要があります。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];
[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
// Override point for customization after application launch.
return YES;
}
前:
後:
UPDATE:次のコードのように、背景画像を設定し、影をゼロとして設定することもできます
UIImage* tabBarBackground = [UIImage imageNamed:@"tabbar.png"];
[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UITabBar appearance] setBackgroundImage:tabBarBackground];
出力:
shadowImage
のUITabbar
プロパティは、UITabbar
のこの境界線(灰色の影)を担当します。このプロパティの値を更新して削除します。
これを試してください、** Objective-C **
//Remove shadow image by assigning nil value.
[[UITabBar appearance] setShadowImage: nil];
// or
// Assing UIImage instance without image reference
[[UITabBar appearance] setShadowImage: [[UIImage alloc] init]];
** Swift **
//Remove shadow image by assigning nil value.
UITabBar.appearance().shadowImage = nil
// or
// Assing UIImage instance without image reference
UITabBar.appearance().shadowImage = UIImage()
ここにAppleガイドライン shadowImage
@available(iOS 6.0, *)
open var shadowImage: UIImage?
デフォルトはnilです。 nil以外の場合、デフォルトのシャドウ画像の代わりに表示するカスタムシャドウ画像。カスタムシャドウを表示するには、カスタム背景画像も-setBackgroundImage:で設定する必要があります(デフォルトの背景画像を使用する場合は、デフォルトのシャドウ画像が使用されます)。
限界まで切り詰めないと答えが見つかりませんでした。そして、UITabBar.appearance().shadowImage
の使い方は時代遅れのようです
だから私は完璧ではないが、iOS10とiOS11のUITabBarシャドウを削除するための実用的で安全なソリューションを作成しましたなし境界へのクリッピング。 iPhone Xでも動作します(動作しなかった場合は奇妙になります;))
以下のコードは、UITabBarController
階層を実行し、シャドウビューを探します。これは(今のところ)_UIBarBackground
のサブビューであるUIImageView
です。
extension UITabBarController {
public func hideTopShadow() {
// looking for tabBar
for subview in self.view.subviews {
let tabBarSubviewName = String(describing: type(of: subview))
guard tabBarSubviewName == "UITabBar" else { continue }
// looking for _UIBarBackground. The other subivews are UITabBarButtons
for tabBarSubview in subview.subviews {
let tabBarSubviewName = String(describing: type(of: tabBarSubview))
guard tabBarSubviewName == "_UIBarBackground" else { continue }
// looking for UIImageView. This is the only subview
for shadowView in tabBarSubview.subviews where shadowView is UIImageView {
shadowView.isHidden = true
return
}
}
}
print(" **** ERROR: Could not find the shadow view \(self.self) \(#function)")
}
}
可能な使用法。 UITabBarControllerのサブクラスがあるので、次のようにしました。
// to avoid excessive runs through the hierarchy after the shadow was hidden
fileprivate var hasHiddenShadow: Bool = false
override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard !hasHiddenShadow else { return }
hasHiddenShadow = true
DispatchQueue.main.asyncAfter(deadline: .now()) {
self.hideTopShadow()
}
}
コントローラメソッドを更新します
override func viewDidLoad() {
super.viewDidLoad()
self.tabBar.clipsToBounds = true
if #available(iOS 13, *) {
self.tabBar.standardAppearance.shadowImage = nil
self.tabBar.standardAppearance.shadowColor = nil
}
}