Seb Vidal's banner
Seb Vidal's profile picture

Seb Vidal

@SebJVidal6,720 subscribers

iOS Developer 👨🏽‍💻 Chairman of the _UINavigationBarPalette fan club.

Shorts

It's hard not to add fuel to the "is SwiftUI production-ready" fire when this is the state of the "best way to build an app" 6 years after the framework was released... 🙃 ~30 lines of (admittedly sloppy) but simple code, unusable on iOS 26. Oh! And it works just fine on 18 🫠

It's hard not to add fuel to the "is SwiftUI production-ready" fire when this is the state of the "best way to build an app" 6 years after the framework was released... 🙃 ~30 lines of (admittedly sloppy) but simple code, unusable on iOS 26. Oh! And it works just fine on 18 🫠

66,875 görüntüleme

With a bit of UIKit Jiggery-Pokery™ you can display arbitrary views as the content of a segmented control’s segments. In this case, a _UIHostingView featuring SwiftUI Text with an animated numeric content transition. Although probably doable _with_, no private APIs used here!

With a bit of UIKit Jiggery-Pokery™ you can display arbitrary views as the content of a segmented control’s segments. In this case, a _UIHostingView featuring SwiftUI Text with an animated numeric content transition. Although probably doable _with_, no private APIs used here!

21,699 görüntüleme

Spent some time reverse engineering Apple Music and Podcast's search chips UI 👀 Interestingly, there's no public or private API to achieve this, _and_ both Music and Podcasts have different implementations of the identical interface 🫠 Anyone interested in an article on this?

Spent some time reverse engineering Apple Music and Podcast's search chips UI 👀 Interestingly, there's no public or private API to achieve this, _and_ both Music and Podcasts have different implementations of the identical interface 🫠 Anyone interested in an article on this?

143,814 görüntüleme

Spent some time preparing Duet for iOS 26. Pretty happy with how this interaction turned out! In a shocking turn of events, I ended up using SwiftUI for the two map style buttons because, despite UIButton.Configuration being great, it’s got noting on SUI’s ButtonStyle API.

Spent some time preparing Duet for iOS 26. Pretty happy with how this interaction turned out! In a shocking turn of events, I ended up using SwiftUI for the two map style buttons because, despite UIButton.Configuration being great, it’s got noting on SUI’s ButtonStyle API.

52,702 görüntüleme

All of that work for what ended up being a very subtle effect... Happy with it though! Was worth the extra effort getting it working with UIKit's block-based animation APIs. Means I can use UIViewControllerTransitionCoordinator's animate(alongsideTransition:completion:) 🤓

All of that work for what ended up being a very subtle effect... Happy with it though! Was worth the extra effort getting it working with UIKit's block-based animation APIs. Means I can use UIViewControllerTransitionCoordinator's animate(alongsideTransition:completion:) 🤓

55,340 görüntüleme

Huge news for _UINavigationBarPalette fans... 😄 In iOS 18, Apple added a new private _topPalette property to UINavigationItem, complimenting the existing _bottomPalette. This lets you pin a custom view to the top of your UINavigationBar. Seen a few system apps use this recently.

Huge news for _UINavigationBarPalette fans... 😄 In iOS 18, Apple added a new private _topPalette property to UINavigationItem, complimenting the existing _bottomPalette. This lets you pin a custom view to the top of your UINavigationBar. Seen a few system apps use this recently.

56,171 görüntüleme

Been a while, but here's your private API of the day... UIKit's fluid slider, as seen in Apple Music, Podcasts, SpringBoard and more. UISlider has private `_sliderStyle` and `sliderConfiguration` properties. Here, the slider has a style of 110, and the configuration is an instance of the private `_UISliderFluidConfiguration` class.

Been a while, but here's your private API of the day... UIKit's fluid slider, as seen in Apple Music, Podcasts, SpringBoard and more. UISlider has private `_sliderStyle` and `sliderConfiguration` properties. Here, the slider has a style of 110, and the configuration is an instance of the private `_UISliderFluidConfiguration` class.

57,137 görüntüleme

I promised you a zinger, so here's your private API of the day... Meet _UIContextMenuAccessoryView and UIContextMenuInteractionDelegate_Private's _contextMenuInteraction(_:accessoriesForMenuWithConfiguration:) method. This enables iMessage-like accessory views to be displayed alongside a context menu. Quite a lot going on here, so let me know if you're interested in a blog post 👀

I promised you a zinger, so here's your private API of the day... Meet _UIContextMenuAccessoryView and UIContextMenuInteractionDelegate_Private's _contextMenuInteraction(_:accessoriesForMenuWithConfiguration:) method. This enables iMessage-like accessory views to be displayed alongside a context menu. Quite a lot going on here, so let me know if you're interested in a blog post 👀

42,542 görüntüleme

Interesting new private property of UINavigationItem added in iOS 18, _preferredNavigationBarVisibility. This is really handy if only your detail view requires a nav bar. No need to set isHidden in viewDidAppear(_:) and viewWillDisappear(_:). Here's an example in Duet...

Interesting new private property of UINavigationItem added in iOS 18, _preferredNavigationBarVisibility. This is really handy if only your detail view requires a nav bar. No need to set isHidden in viewDidAppear(_:) and viewWillDisappear(_:). Here's an example in Duet...

31,424 görüntüleme

Ooh here's a fun one! 👀 UISheetPresentationController.Detent has a private _fullDetent method that, when applied to a UISheetPresentationController's detents array, enables switching between a sheet and a full screen modal with a gesture... Super clean interaction!

Ooh here's a fun one! 👀 UISheetPresentationController.Detent has a private _fullDetent method that, when applied to a UISheetPresentationController's detents array, enables switching between a sheet and a full screen modal with a gesture... Super clean interaction!

30,224 görüntüleme

Spent some time reverse engineering the Apple Maps sheet UI on iPad. This can be achieved with a few private UIKit APIs... 3 private properties of UISheetPresentationController: horizontalAlignment, wantsBottomAttached and marginInRegularWidthRegularHeight. Code below... 👇🏽

Spent some time reverse engineering the Apple Maps sheet UI on iPad. This can be achieved with a few private UIKit APIs... 3 private properties of UISheetPresentationController: horizontalAlignment, wantsBottomAttached and marginInRegularWidthRegularHeight. Code below... 👇🏽

20,254 görüntüleme

Here’s your reminder that, if you’re triggering an animation on -[UIViewController viewDidAppear], you should probably create an ivar that keeps track of whether or not you _need_ to start said animation 🙃

Here’s your reminder that, if you’re triggering an animation on -[UIViewController viewDidAppear], you should probably create an ivar that keeps track of whether or not you _need_ to start said animation 🙃

20,593 görüntüleme

Videos

Daha fazla içerik yok.