Сегодня встал в 5:30 🙃, и к 10 утра уже успел отлично и продуктивно покодить 👍.
Раньше я уже писал про large titles в UINavigationBar, сегодня окончательно их освоил. Поискал в каких приложениях (кроме системных) они ещё используются и нашёл только Тинькова.
Сделано у них очень криво (@tinkoff_bank без обид 🙃). Либо свои контролы с имитацией нативного поведения, либо неправильное использование UIKit.
Если кто не понял 🙃, то проблемы хорошо видны при медленном интерактивном swipeToBack (про висящую поверх всех окон иконку профиля я молчу 😁).
Давайте за образец возьмём анимацию в системных приложениях Apple, например "Настройки".
Посмотрел ещё SO, он просто пестрит запросами "fix large titles animation", "large titles glitch", "enable large titles"...
Дальше будет небольшой гайдик как сделать плавный переход с системной анимацией и отсутствием глитчей при swipeToBack на примере нативного UINavigationController и 2-х UIViewController-aх, первый из которых должен показывать large titles, а второй нет.
Давайте вспомним базу🙃:
1. UINavigationController содержит UINavigationBar 2. UIViewController имеет UINavigationItem 3. При вызове push у UINavigationController в UINavigationBar анимированно добавляется UINavigationItem следующего контроллера
Ещё один важный и очень простой моментик:
При обращении к свойству navigationController внутри UIViewController, вы изменяете ОБЩИЙ навигационный контроллер!
Теперь go.
Первым делом нужно задать свойство prefersLargeTitles у UINavigationBar в true, и больше его никогда не трогать!
Никаких изменений prefersLargeTitles в viewWillAppear и viewWillDisapear – это сразу сломает всю анимацию, плюс, рано или поздно вы сломаете свой UINavigationBar.
Дальше у первого контроллера нужно установить navigationItem.largeTitleDisplayMode = .always, а у второго .never. Сделать это нужно ДО вызова viewDidLoad. Я делаю это в Storyboard.
На этот момент у вас всё верно собрано. Но, посмотрев на анимацию swipeToBack, мы можем увидеть что навигационный бар зарезает наш контент!
Кажется что это баг, но это фича 🙃.
UINavigationBar принадлежит UINavigationController, на первом контроллере у нас оставался "увеличенный" навигационный бар, а на втором – "компактный". UINavigationController решает увеличить фрейм бара при анимации, мы не можем его винить!
Видимо здесь все и сдавались 😁
Решение на поверхности. Посмотрите на цвета: оранжевый – это navigationBar.backgroundColor, а зелёный – navigationBar.barTintColor.
Теперь делаем navigationBar.backgroundColor = .clear и получаем под ним цвет view первого UIViewController-а.
Всё готово, больше ничего не нужно.
Смотрите ещё раз на анимацию 🐸. Можете поделиться и сделать мир iOS-ных приложений чуть более UIKit-каноничным 🍏✅.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Тред про получение UK Global Talent Visa.
Свои приехали и забрали с женой в позапрошлую субботу ✅
Можно сразу пошарить тред – материалов доступных немного, готов ответить на вопросы и помочь, чем смогу 🫡
👇
Что в треде: 1. Что за виза, на сколько лет, сколько стоит 2. Процесс получения Endrosement-а на своём примере 3. Конвертация Endorsement-а в визу для себя и неофициального партнёра (какие документы для партнёра – самое важное) 4. Сроки, несколько советов, подводные камни
👇
1. Что за виза, сколько стоит
Это виза, которая даёт право жить и работать в UK без привязки к работодателю сроком от 1 до 5 лет с возможностью продления.
Виза персональная, но владелец визы может оформить визу на членов семьи – жену (неофициального партнёра тоже) и детей.
Новый год – время перемен💨
Возвращаюсь к техническому блогингу
И начать хочу с оцифровки (и дополнения) своего доклада с Мир.Труд.Мобайл.
Ниже тред про оптимизации:
- Размера приложения
- Времени старта
- Скорости сборки
В конце будут видео, слайды и важный тизер 🙂
В докладе я делаю сравнение этих 3-х оптимизаций с тремя китами разработки. Почему?
Размер критичен для пользователя, особенно азиатских рынков (погуглите про Индию), мы в Сбере имели 10% негативных отзывов из стора.
Время старта – прямой UX.
Время сборки – коррелирует с TTM.
Начнём с размера.
Чуть подробнее "почему":
- Недовольство пользователей
- Сложность скачать без Wi-Fi (200 мб) – не все знают про специальную настройку
- Неконтролируемый прирост (у нас выходит 3-4 мб в релиз просто на фичах)
Пора рассказать о том чем я занимался 3 месяца и где пропадал 🙃. Тредов будет несколько, начну с рабочих историй.
Всё лето и сентябрь я обновлял CБОЛ с Xcode 11.3.1 и Swift 5.1.3 на Xcode 11.6 и Swift 5.2.4, попутно включая module stability и swift evolution 🥵
Сперва нужно немного погрузиться в контекст, понять что такое MS и SE, зачем они нужны и где разница.
Можно послушать Влада, он рассказывал на @CocoaHeadsRu и @MobiusConf теорию "на примере Сбера", но, к сожалению или счастью, ему не пришлось столкнуться с этим на практике 😅
До Swift 5 выход любой новой версии был болью, так как все фреймворки приходилось перекомпилировать, а иногда и вовсе переписывать исходный код.
В Swift 5 завезли стабильный бинарный интерфейс. Наконец системные Swift-фреймворки переехали из приложения в ОС (-6 мб)
Пока все делятся эмоциями после WWDC 🔥, копают что там нового в SwiftUI, я, пожалуй, поделюсь маленькой радостью и читом на случай, если вам нужно срочно отправить версию своего приложения в AppStore, у вас нет дизайнера, а хочется сделать плюс-минус приличные скриншоты 🤙.
Под приличными скриншотами я понимаю не скучные снимки экрана с запущенным приложением, а пресеты, где есть скрин, фон и какой-то call-to-action.
Я не дизайнер, знаю, что можно было и лучше 🙃.
Сперва я конечно же погуглил подобные сервисы с темплейтами и возможностью генерировать скрины под 5.5', 5.8' и 6.5'.
Их много – AppScreen, AppShots и другие. Интересно, что во многие из них ограниченная регистрация, плюс все они платные. Самый дешёвый и полный – $20.