iOS Broadcast
3.38K subscribers
1.72K photos
85 videos
985 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
加入频道
#ui

How to force two lines of Text in SwiftUI (2 мин)

🗣 Как ограничить максимально UILabel мы знаем, а как выставить минимум строк?

Ловите небольшую статью с оригинально простым способ это сделать в SwiftUI. Можно также дополнить свой набор вспомогательных extensions
🔥5👎3👍2
#ui

Swift Size Class that can be understood in 3 seconds (3 секунды)

🗣 Разбор метрик compact и regular в Size Classes. Как определить положение девайса по этим характеристикам?

Эти характеристики позволяют намного более точно настраивать лэйауты элементов как в UIKit, так и в SwiftUI.

Расскажите, когда вам приходилось их использовать?
🔥6👎3
#ui

The Developer's Guide to Cell Content Configuration in iOS 14 (7 минут)

🗣 Разбор нововведения iOS 14 в отношении стандартной UITableViewCell

Давно писали cell.textLabel?.text = ...
Для тех, кто в танке (как я 😅), разработчики Apple решили все-таки внедрить по умолчанию то, что мы обычно писали сами, а именно возможность конфигурировать ячейки. Пожалуйста, новые протоколы: UIContentConfiguration, UIContentView
👎3🔥2👍1
#ui #swift #ios

New in iOS 16 — Self-resizing UICollectionView Cells (3 минуты)

🗣 В iOS 16 разработчикам наконец станет легче работать с размерами ячеек Table View or Collection View

НА WWDC 2022 Apple анонсировали важное улучшение фреймворка UIKit. Теперь ячейки Table View и Collection View самостоятельно подстраиваются под размер контента через аттрибут selfSizingInvalidation (true по умолчанию)

Изменения размеров ячеек можно через метод invalidateIntrinsicContentSize() с анимацией и через этот метод внутри UIView.performWithoutAnimation без анимации
👎3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Fade the First and Last Elements in a UICollectionView

Как создать fade анимацию для UICollectionView нужно:
👉 В ячейке сделать функцию с анимированным fade'ом
func updateCell(faded: Bool, animated: Bool = true)
👉 Во viewController'е реализуем
func scrollViewDidScroll(_ scrollView: UIScrollView),
где получаем видимые ячейки
self.collectionView.indexPathsForVisibleItems
а затем проверяем, видимы ли они целиком
collectionView.bounds.contains(cellRect)
Если нет, то активируем анимацию в ячейке

#UI
3👎1
How to create Rounded Corners Button in UIKit

В iOS 15, появились новые способы задать скругления кнопки через UIButton.Configuration:
👉 Через встроенный стиль со скругленными углами UIButton.Configuration.filled()
👉 Если дефолтное скругление не устраивает, можно задать cornerStyle у UIButton.Configuration (примеры на скрине)
👉 Если нужно задать определенное значение скругления, используйте configuration.background.cornerRadius, а затем установите configuration.cornerStyle в .fixed

#UI
👎3👍2
Создание анимаций для навигации в iOS

Можно использовать UIViewControllerAnimatedTransitioning для переходов в UINavigationController, для переходов посредством present и dismiss контроллеров, а даже для переходов между экранами UITabBarController
В статье подробно описан первый случай

#UI
🔥2👍1👎1
iOS: Навигация по-новому

По мере развития SwiftUI основной компонент навигации NavigationView был заменен на NavigationStack.
В чем суть: теперь навигация становится возможной даже при помощи передачи пути для навигации. Те кто пользовался DeepLink или UniversalLink возрадуются. Теперь и на их улице будет праздник. 
Вся навигация сводится к передаче массива с условными названиями экранов в переменную пути. NavigarionStack пройдет все цепочку навигации автоматически, и покажет последний экран в цепочке.

#ui
👍8👎2
How to change Status Bar text color in iOS (2 мин)

Два способа поменять цвет текста в статус баре:
👉 Для всего приложения: в Info.plist добавить ключ "Status bar style" и задать значение "Light Content" или "Dark Content", затем добавить ключ "View controller-based status bar appearance" и установить значение "NO"

👉 Для отдельного view controller'а с помощью
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
При этом в info.plist установить значение ключа "View controller-based status bar appearance" в YES или убрать ключ.

#ui
👍6👎1
Стоит ли переходить с UIKit на SwiftUI? Опыт СберМаркета

👉 Если вы собираетесь писать новый проект, то автор рекомендует этот фреймворк
👉 Если это старый проект, то можно переписать некоторые компоненты на UIKit, вынося их, для начала, в отдельные ViewController’ы, и добавляя с помощью addSubview в родительский VC, а после уже полностью переписывать на SUI и оборачивать в UIHostingController.

Сам по себе SwiftUI не страшен, но есть ещё неизведанные территории и редкие баги, с которыми можно справиться, если внимательно читать документацию. По скорости разработки SwiftUI по большей части обходит UIKit, хотя сначала нужно набить руку и познакомиться с фреймворком. 

#ui
👍13👎6
Жизненный цикл UIViewController

Вспомним и закрепим еще раз с наглядной схемой:
👉 init
👉 loadView - создание view
👉 viewDidLoad - viewController создан, Outlets на месте
👉 viewWillAppear - view будет добавлено в иерархию отображения
👉 viewWillLayoutSubViews - каждый раз, когда изменяется frame
👉 viewDidLayoutSubviews - view только что разместило свои subview
👉 viewDidAppear - после того, как ViewController появляется на экране
👉 viewWillDisappear - до того, как viewController будет удален с экрана
👉viewDidDisappear - после удаления viewController'a с экрана
👉 deinit

#ui
🔥19👎2👍1
Bottom sheet: Navigation

В статье описано, как создать полноценную навигацию в рамках bottom sheet отображения, основанного на autolayout, а не на неудобном ручном расчёте высоты. Повторили анимации навигационных переходов. Добавили navigation bar как нативный способ управления навигацией.

#ui
👍10👎2
How We Centrally Manage UITabBar in Our iOS Apps
(4 мин)

Иногда бывает нужно скрыть UITabBar. Авторы делятся опытом реализации и дают следующие советы по управлению UITabBar:
👉 Единый метод для показа/скрытия UITabBar вместо hidesBottomBarWhenPushedtabbar.isHidden или tabbar.frame
👉 Управление показом/скрытием в одном месте. MainTabBarNavigationManager: UINavigationControllerDelegate и задать его делегатом для всех navigation controller'ов

#ui
👍4👎1
Coordinator pattern with Tab Bar Controller

Как настроить навигацию в iOS приложении, где есть различные флоу и UITabBarController?

👉 Создаем AppCoordinator - это главный координатор приложения. Он должен быть строго один❗️
👉 AppCoordinator будет открывать и хранить в childCoordinators основные флоу. Например, Login и TabBar
👉 Каждый последующий флоу может иметь собственный координатор, открывать новые флоу и сохранять их в свои childCoordinators
👉 Каждый координатор в методе start() открывает новый флоу на родительском, а в методе finish() - закрывает и говорит родительскому координатору взять на себя управление после закрытия
👉 TabBarCoordinator открывает несколько флоу одновременно для каждого таба и умеет переключать эти табы

#ui
12
This media is not supported in your browser
VIEW IN TELEGRAM
clipped() не оказывает влияния на проверку касаний

Модификатор clipped() в SwiftUI обрезает вью до своих(модификатора) границ, скрывая все, что выходит за пределы этих границ. Но обратите внимание, что обрезание не влияет на проверку касаний (hit testing); обрезанный вью по-прежнему принимает тапы / клики за пределами видимой области.

#ui
👍8👎2
Learn iOS Custom View Controller Animation Transition once for all!

Если надоели нативные анимации при переходах между экранами, то можно украсить свое приложение новыми анимированными переходами в 4 шага:
👉 Сначала создадим наши анимации для открытия и закрытия экрана: SomePushAnimation и SomePopAnimation
👉 Унаследуем оба класса от UIViewControllerAnimatedTransitioning и реализуем нужные методы
👉 Теперь создадим класс-делегат TransitionDelegate, котрый будет возвращать наши уже созданные анимации для pop'a и push'a
👉 Ну и теперь осталось присвоить делегат ViewController-у в методе:
override func viewDidLoad() {
  super.viewDidLoad()
  self.transitioningDelegate = transitionDelegate
}

#ui
🔥6👎1
Как мы разрешили использование Storyboard в iOS-разработке

Верстать в Xib и Storyboard для кого-то моветон, однако в статье с примерами рассказывают о преимуществах Storyboard:
👉 Меньше кода
👉 Меньше время компиляции (в эксперименте в 6.5 раз быстрее, чем при верстке кодом)
👉 Предварительный просмотр
👉 Предупреждения об ошибках

#ui
👍8🤔4
The relationship between UIView and CALayer (1 мин)

Об отношениях UIView и CALayer:
👉 UIView наследуется от UIResponder, это базовый юнит иерархии view и контейнер для CALayer
👉 CALayer - sublayer UIView, который обрабатывает отрисовку и анимации содержимого view
👉 UIView контроллирует графику, анимации и верстку с помощью CALayer. Например, свойства frame, bounds и center UIView задаются соответствующими свойствами CALayer
👉 CALayer предоставляет множество свойств и функций, которых нет у UIView. Например, shadow, corner radius, border, gradient

#ui
👍6👎1
UICollectionViewCompositionalLayout (10 мин)

Compositional layouts - это декларативный вид API, который позволяет нам создавать большие макеты путем объединения небольших групп макетов.
Чтобы создать любой Compositional layouts, необходимо реализовать следующие четыре класса:
👉 NSCollectionLayoutSize
👉 NSCollectionLayoutItem -  ячейка нашего макета
👉 NSCollectionLayoutGroup содержит NSCollectionLayoutItem в горизонтальной, вертикальной или пользовательской форма
👉 NSCollectionLayoutSection используется для инициализации секции путем передачи NSCollectionLayoutGroup
Подробнее о реализации читайте в статье

#ui
👍51👎1
Compose iOS переходит в стадию Beta 🔥

#kotlinconf24 #compose #kmp #ui #ios
👏7🤔2