Hi David.  I hate to tell you, your code doesn’t work.

The old UINavigationBar background that I’m trying to remove is still there 
when I use your code over what I stumbled across.  

Something in the code below does remove the background image.

        self.navigationController!.navigationBar.isTranslucent = false
        self.navigationController!.navigationBar.titleTextAttributes = 
[.foregroundColor: UIColor.white]

        let navBar = self.navigationController!.navigationBar
        let standardAppearance = UINavigationBarAppearance()
        standardAppearance.configureWithOpaqueBackground()
        standardAppearance.backgroundImage = UIImage()

        navBar.standardAppearance = standardAppearance
        navBar.scrollEdgeAppearance = standardAppearance

        self.navigationController?.navigationBar.backgroundImage(for: .default)
        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: 
.default)

Sadly, each build takes 2 minutes (thanks Swift!) even if I’m only changing 1 
line, so it’s not time effective to figure out exactly what is.

Fun times.  

Cheers,
Alex Zavatone


> On Jan 28, 2022, at 2:02 PM, David Duncan <david.dun...@apple.com> wrote:
> 
> 
> 
>> On Jan 28, 2022, at 11:50 AM, Alex Zavatone <z...@mac.com 
>> <mailto:z...@mac.com>> wrote:
>> 
>> Awesome.  Thank you, David.  
>> 
>> 
>> I stumbled across this too while going through Apple documentation.  What’s 
>> scary is that I have no idea why it works.
>> 
>>         self.navigationController!.navigationBar.barStyle = .default
>>         self.navigationController!.navigationBar.isTranslucent = false
>>         self.navigationController!.navigationBar.titleTextAttributes = 
>> [.foregroundColor: UIColor.white]
>>      self.navigationController?.navigationBar.backgroundImage(for: .default)
>>         navigationController?.navigationBar.setBackgroundImage(UIImage(), 
>> for: .default)
> 
> This stuff is pre-iOS 13 appearance customization. Using the new stuff will 
> disable it.
> 
>>         
>>         let navBar = self.navigationController!.navigationBar
>>         let standardAppearance = UINavigationBarAppearance()
>>         standardAppearance.configureWithOpaqueBackground()
>>         standardAppearance.backgroundImage = UIImage()
>> 
>>         navBar.standardAppearance = standardAppearance
>>         navBar.scrollEdgeAppearance = standardAppearance
> 
> With iOS 13 the navigation bar now has multiple appearance states. The 
> scrollEdgeAppearance is when your bar is at the edge of a scroll view (top 
> for a navigation bar, bottom for tab & toolbar). This configures the bar to 
> use the same appearance state (in this case, a solid color background, using 
> UIColor.systemBackgroundColor). In context the setting of backgroundImage 
> doesn’t do anything (it defaults to nil and empty images have identical 
> behavior).
> 
> By setting standardAppearance == scrollEdgeAppearance it in turn disables the 
> “bar becomes transparent at the top” behavior introduced for large titles in 
> iOS 13 and extended to all bar in iOS 15.
> 
>>         
>> 
>> Thanks again David.  You’re on my Christmas list.
>> 
>> Alex Zavatone
>> 
>>> On Jan 28, 2022, at 1:30 PM, David Duncan <david.dun...@apple.com 
>>> <mailto:david.dun...@apple.com>> wrote:
>>> 
>>> UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
>>> [appearance configureWithTransparentBackground];
>>> navigationItem.standardAppearance = appearance;
>>> 
>>> Thats the simplest per-item way to do it. This does imply you adopt the new 
>>> appearance APIs introduced in iOS 13.
>>> 
>>>> On Jan 28, 2022, at 11:03 AM, Alex Zavatone via Cocoa-dev 
>>>> <cocoa-dev@lists.apple.com <mailto:cocoa-dev@lists.apple.com>> wrote:
>>>> 
>>>> Hi there.  I’m in the middle of trying to find out how the hell to remove 
>>>> a background from a UINavigationBar and it’s not easy.  You’d think that 
>>>> you could get a UInavigationBar.navigationitem.background and remove it 
>>>> from a superview or set its alpha to 0, but it’s not that easy.
>>>> 
>>>> Does anyone have any clue how to get a reference to the background once it 
>>>> has been set so that it can be set to 0 alpha or removed from the 
>>>> superview?  
>>>> 
>>>> Thanks in advance and happy Friday.  Apple sure has ways to make things 
>>>> that should be simple very obscure and extremely deifficult to handle.  
>>>> 
>>>> Cheers, 
>>>> Alex Zavatone
>>>> _______________________________________________
>>>> 
>>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com 
>>>> <mailto:Cocoa-dev@lists.apple.com>)
>>>> 
>>>> Please do not post admin requests or moderator comments to the list.
>>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com 
>>>> <http://lists.apple.com/>
>>>> 
>>>> Help/Unsubscribe/Update your Subscription:
>>>> https://lists.apple.com/mailman/options/cocoa-dev/david.duncan%40apple.com 
>>>> <https://lists.apple.com/mailman/options/cocoa-dev/david.duncan%40apple.com>
>>>> 
>>>> This email sent to david.dun...@apple.com <mailto:david.dun...@apple.com>
>>> 
>> 
> 

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to