Rtishchev Evgenii Profile picture
May 10, 2020 13 tweets 4 min read Read on X
Сегодня встал в 5:30 🙃, и к 10 утра уже успел отлично и продуктивно покодить 👍.

Раньше я уже писал про large titles в UINavigationBar, сегодня окончательно их освоил. Поискал в каких приложениях (кроме системных) они ещё используются и нашёл только Тинькова.
Сделано у них очень криво (@tinkoff_bank без обид 🙃). Либо свои контролы с имитацией нативного поведения, либо неправильное использование UIKit.
Если кто не понял 🙃, то проблемы хорошо видны при медленном интерактивном swipeToBack (про висящую поверх всех окон иконку профиля я молчу 😁).

Давайте за образец возьмём анимацию в системных приложениях Apple, например "Настройки".
Посмотрел ещё SO, он просто пестрит запросами "fix large titles animation", "large titles glitch", "enable large titles"...

Люди изобретают фантастические велосипеды 😵morningswiftui.com/blog/fix-large…
Дальше будет небольшой гайдик как сделать плавный переход с системной анимацией и отсутствием глитчей при 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.

Не нужно никаких двойных переустановок свойства как часто советуют на SO: stackoverflow.com/questions/4637…
На этот момент у вас всё верно собрано. Но, посмотрев на анимацию 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
 

Keep Current with Rtishchev Evgenii

Rtishchev Evgenii Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @katleta3000

Sep 8, 2023
Хочу поделиться радостью и помочь другим 🚀

Тред про получение UK Global Talent Visa.
Свои приехали и забрали с женой в позапрошлую субботу ✅

Можно сразу пошарить тред – материалов доступных немного, готов ответить на вопросы и помочь, чем смогу 🫡

👇
Что в треде:
1. Что за виза, на сколько лет, сколько стоит
2. Процесс получения Endrosement-а на своём примере
3. Конвертация Endorsement-а в визу для себя и неофициального партнёра (какие документы для партнёра – самое важное)
4. Сроки, несколько советов, подводные камни

👇
1. Что за виза, сколько стоит

Это виза, которая даёт право жить и работать в UK без привязки к работодателю сроком от 1 до 5 лет с возможностью продления.

Виза персональная, но владелец визы может оформить визу на членов семьи – жену (неофициального партнёра тоже) и детей.

👇
Read 31 tweets
Jan 31, 2022
Новый год – время перемен💨
Возвращаюсь к техническому блогингу
И начать хочу с оцифровки (и дополнения) своего доклада с Мир.Труд.Мобайл.

Ниже тред про оптимизации:
- Размера приложения
- Времени старта
- Скорости сборки

В конце будут видео, слайды и важный тизер 🙂
В докладе я делаю сравнение этих 3-х оптимизаций с тремя китами разработки. Почему?

Размер критичен для пользователя, особенно азиатских рынков (погуглите про Индию), мы в Сбере имели 10% негативных отзывов из стора.

Время старта – прямой UX.

Время сборки – коррелирует с TTM.
Начнём с размера.
Чуть подробнее "почему":
- Недовольство пользователей
- Сложность скачать без Wi-Fi (200 мб) – не все знают про специальную настройку
- Неконтролируемый прирост (у нас выходит 3-4 мб в релиз просто на фичах)
Read 53 tweets
Oct 8, 2020
Q 👋,

Пора рассказать о том чем я занимался 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 мб) Image
Read 37 tweets
Jun 29, 2020
Я вписался в занятную авантюру и решил помочь одному американскому стартапу .

Нужна команда 🙃😁.

iOS, Android и backend (идеал с навыками frontend).
Все middle+, надёжные, самостоятельные.

Затащить нужно до сентября 🔥.
Платят в 💵. Удалёнка.
Есть backend, написан на Node.js, es6, базы – Mongo и Redis. Там же лежит админка – JS, CSS, HTML.

Подтянуты Karma и Jasmine, но тестов я не увидел. Есть Grunt, менеджеры – NPM и Bower. Хостинг – Amazon.

Нужно разобраться, подтюнить и запустить 💪.
Дальше можно переписать 👍.
iOS я начну. Стек без фантазий и реактивщины, но iOS 13+. SwiftUI можно затащить после сентября. Всё с нуля. 2 приложения.
Read 6 tweets
Jun 23, 2020
Пока все делятся эмоциями после WWDC 🔥, копают что там нового в SwiftUI, я, пожалуй, поделюсь маленькой радостью и читом на случай, если вам нужно срочно отправить версию своего приложения в AppStore, у вас нет дизайнера, а хочется сделать плюс-минус приличные скриншоты 🤙.
Под приличными скриншотами я понимаю не скучные снимки экрана с запущенным приложением, а пресеты, где есть скрин, фон и какой-то call-to-action.

Я не дизайнер, знаю, что можно было и лучше 🙃. Image
Сперва я конечно же погуглил подобные сервисы с темплейтами и возможностью генерировать скрины под 5.5', 5.8' и 6.5'.

Их много – AppScreen, AppShots и другие. Интересно, что во многие из них ограниченная регистрация, плюс все они платные. Самый дешёвый и полный – $20.
Read 7 tweets
May 20, 2020
Материал ниже, возможно, покажет что я сильно отстаю в развитии, но хочу поделиться 🙃.

Я наконец разобрался с generic protocols with associated types на практике.

👇
В WowIdea есть слой по работе с бизнес-юнитами (идеи, комментарии, профили). Все методы по работе с ними подходят под GoF-паттерн репозиторий.

Поэтому с первых дней проекта я написал Generic-тип репозитория по работе с моделями данных. Image
Подход показал себя жизнеспособным, проблем не было до момента пока я не подумал: "а как мне писать unit-тесты и мокать эти репозитории 🤔".

Вынес методы в протокол CRUD. Чуть упростил аргументы для примера. Image
Read 7 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(