Léo Natan 🇮🇱
banner
leonatan.bsky.social
Léo Natan 🇮🇱
@leonatan.bsky.social
macOS & iOS engineer • grumpy young man, yelling at clouds • disillusioned, burned-out cynic • not politically correct • https://twitter.com/LeoNatanhttps://mastodon.social/@LeoNatan

Ramat HaSharon, Israel
So to enable and disable the effect, in my case, I need to track which header is pinned to the top, and call _setActive: on the interactions of the header views to only enable for the top one. I extended UICollectionViewLayoutAttributes with a fields for this.

And it works.
October 13, 2025 at 3:28 PM
If you create an _UIScrollPocketContainerInteraction instance and add it to the view, it actually works. But it creates an amusing effect where all glass effects are synchronized.
October 13, 2025 at 3:27 PM
Turns out there is a host of new, private, "interactions", one of which is _UIScrollPocketContainerInteraction, which manages the view's trait environment so that is adjusts child visual effects (using another "interaction").

What if you wanted the same behavior in your code?
October 13, 2025 at 3:25 PM
View hierarchy inspector doesn't reveal much. The two hierarchies are the same, but notice the header view is positioned under the scroll pocket in the custom layout "for some reason".
October 13, 2025 at 3:24 PM
An Apple UICollectionViewLayout subclass vs a custom one. Notice the header visual effect view's glass is "synchronized" with the navigation bar, making them switch appearance together. No way there is a UIGlassContainerEffect in there somewhere.
October 13, 2025 at 3:23 PM
The check for _isPhotosApp is just as retarded as you might expect; there is a hard-coded string of the Photos app bundle identifier and it's checked against the main bundle identifier.

BTW, you can Swizzle that function to return true, and then call the previously mentioned methods.
September 26, 2025 at 12:56 AM
Turns out, there are UITabBar._isMinimized, UITabBar._setMinimized: and UITabBar._setMinimizedStateDidChangeHandler:, which provide this valuable information. But if you call one of these methods, your app will crash. Notice the check for _isPhotosApp, or else raise an exception.
September 26, 2025 at 12:56 AM
Photos on iOS 26 does not use the public bottomAccessory/UITabAccessory API, yet is able to detect when the tab bar minimizes and make that bar fade in and out. Inspecting the hierarchy shows it's just a UIView subclass. So how does it know when the tab bar minimizes?
September 26, 2025 at 12:55 AM
June 24, 2025 at 2:21 PM
So all that ChatGPT wisdom, and yet, "open to work"? 🤔🤣

When did LinkedIn get filled with these clickbait nonsense posts, including generic chatbot farm responses? It's a cesspool.
May 20, 2025 at 11:44 PM
I've been using github.com/emiscience/C... in my AppKit and Catalyst projects, with some very small modifications and a wrapper class that sets things to look modern. I can share the src if wanted.
May 11, 2025 at 10:22 PM
Xcode is a buggy, retarded mess. Pause once, and you get disassembly for each stack frame. Pause a second time, and Xcode is broken. It's not lldb, as `disassemble` produces the correct output. How is that team so incompetent? Then again, what isn't at Apple these days?
April 13, 2025 at 12:46 PM
@1password.bsky.social Hello, I am getting bombarded by these mails recently. Basically, every time I open Safari on iOS. I could make a filter to put that in spam, but you should be aware of it and fix it.
December 20, 2024 at 10:20 PM
People on Black Friday:
November 29, 2024 at 3:30 PM
First muted word on BS. 🎉
November 27, 2024 at 5:16 PM
Now this is the React Native I love to hate. 🤣

Notice the scroll indicator insets are not properly managed … because “native”.

Quality experience by bsky engineering.
November 27, 2024 at 12:07 PM