ios – UIBarButtonItem hit area (SwiftUI, but not only)


So, like many other people, I’ve noticed that a Button added as a ToolbarItem with SwiftUI has a much smaller hit area than a UIBarButtonItem in UIKit. Or so I thought.

Below is a simple code to try the UIKit equivalent:

import UIKit

@UIApplicationMain
final class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        let vc = UIViewController()
        vc.navigationItem.title = "VC"
        vc.view.backgroundColor = .gray //TO COMMENT OUT
        let barItem = UIBarButtonItem(title: "Test", image: nil, target: nil, action: nil)
        vc.navigationItem.rightBarButtonItem = barItem
        let nc = UINavigationController(rootViewController: vc)
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = nc
        window?.makeKeyAndVisible()
        return true
    }
}

It produces the following “correct” behaviour:

UIKit toolbar button

As you can see, hit area is big, extends beyond the text and is comfortable for the user. However, if we comment out setting the background color of a view above (line //TO COMMENT OUT), we get the same behaviour as we observe in SwiftUI:

swiftui toolbar button

So, it looks like without the background we are getting the same behaviour as in SwiftUI – tappable area of ToolbarItem is too small and uncomfortable for users.

Yet, I have tried everything I could come up with and swill couldn’t find a way to ensure that tappable are in SwiftUI is decent.

Does anyone know what the solutions could be?

It is an extremely annoying bug and I am receiving complaints from users 🙁

Latest articles

spot_imgspot_img

Related articles

Leave a reply

Please enter your comment!
Please enter your name here

spot_imgspot_img