Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 467новых вакансий за сутки·93 721вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 267
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

DevOps и инфраструктура

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

Аналитика и данные

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

Другие направления

  • Проджект-менеджер616
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме UIKitВсе вопросы
UIKitJuniorКодинг

Что такое Auto Layout и как создавать constraints программно по сравнению с Interface Builder?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Auto Layout вычисляет позицию и размер view через математические constraints. Программно используйте NSLayoutAnchor + NSLayoutConstraint.activate([…]), всегда устанавливая translatesAutoresizingMaskIntoConstraints = false.

Программное создание constraints через NSLayoutAnchor

import UIKit

class CardViewController: UIViewController {

    private let cardView: UIView = {
        let v = UIView()
        v.backgroundColor = .systemBackground
        v.layer.cornerRadius = 12
        v.translatesAutoresizingMaskIntoConstraints = false  // обязательно
        return v
    }()

    private let titleLabel: UILabel = {
        let l = UILabel()
        l.font = .systemFont(ofSize: 17, weight: .semibold)
        l.numberOfLines = 0
        l.translatesAutoresizingMaskIntoConstraints = false
        return l
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(cardView)
        cardView.addSubview(titleLabel)
        setupConstraints()
    }

    private func setupConstraints() {
        NSLayoutConstraint.activate([
            // cardView: прижат к safe area с отступами 16pt
            cardView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 16),
            cardView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16),
            cardView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16),

            // titleLabel внутри cardView с padding 12pt
            titleLabel.topAnchor.constraint(equalTo: cardView.topAnchor, constant: 12),
            titleLabel.leadingAnchor.constraint(equalTo: cardView.leadingAnchor, constant: 12),
            titleLabel.trailingAnchor.constraint(equalTo: cardView.trailingAnchor, constant: -12),
            titleLabel.bottomAnchor.constraint(equalTo: cardView.bottomAnchor, constant: -12),
        ])
    }
}

Auto Layout — это система ограничений (constraints) в UIKit, которая вычисляет размер и позицию каждого view на основе набора математических соотношений. Вместо того чтобы задавать фиксированный frame, вы описываете отношения между атрибутами: левый край этого view = правый край того view + 8pt.

Ключевые классы и атрибуты

  • NSLayoutConstraint — базовый класс одного ограничения.
  • NSLayoutAnchor и его подклассы: NSLayoutXAxisAnchor, NSLayoutYAxisAnchor, NSLayoutDimension — современный API (iOS 9+).
  • UILayoutGuide — невидимый прямоугольник для группировки ограничений без лишних view.
  • translatesAutoresizingMaskIntoConstraints — обязательно false для любого view, которое вы добавляете программно.

Сравнение с Interface Builder

  • Interface Builder (Storyboard / XIB): constraints создаются мышью, хранятся в XML. Удобно для статичных экранов, но при конфликтах («ambiguous layout») IB показывает предупреждения жёлтым. Merge-конфликты в storyboard — боль при командной работе.
  • Программно: полный контроль, легко переиспользовать через функции/подклассы, diff в git читаем. Но больше кода и нет визуального превью без запуска Xcode Preview / симулятора.
  • NSLayoutConstraint.activate([…]): активировать нужно массивом — это эффективнее, чем вызывать .isActive = true по одному (один проход по движку Auto Layout вместо N).

Content Hugging и Compression Resistance

Два приоритета, о которых часто забывают:

  • contentHuggingPriority — насколько view сопротивляется растяжению сверх intrinsicContentSize. По умолчанию 250.
  • compressionResistancePriority — насколько view сопротивляется сжатию. По умолчанию 750.
// Иконка не должна растягиваться — поднимаем hugging
iconImageView.setContentHuggingPriority(.required, for: .horizontal)
// Заголовок может сжиматься меньше, чем подзаголовок
titleLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)

Подводные камни

  • Забыть translatesAutoresizingMaskIntoConstraints = false — view получит автоматически сгенерированные constraints, которые будут конфликтовать с вашими.
  • Добавлять constraints до того, как view добавлен в иерархию (addSubview) — runtime crash с неясным сообщением об ошибке.
  • Использовать constraint.isActive = true в цикле вместо NSLayoutConstraint.activate([…]) — избыточные проходы движка, особенно заметно при большом числе constraints.
  • Не учитывать safeAreaLayoutGuide — контент уходит под notch или home indicator на современных iPhone.
  • Держать ссылки на constraints для последующего изменения через constraint.constant = …, а не деактивировать-активировать их попарно — деактивация/активация дороже изменения constant.
  • Ambiguous layout в runtime — используйте view.hasAmbiguousLayout и view.exerciseAmbiguityInLayout() в Debug-сборке для диагностики.
  • Смешивать Auto Layout и прямое задание frame в одном view — непредсказуемые результаты после следующего layout-прохода.
  • Не тестировать на Dynamic Type и разных размерах экрана — фиксированные высоты ломают layout при крупном шрифте.

Частые вопросы на собеседовании

  • Как работает навигация в UIKit с помощью UINavigationController?
  • В чём разница между UIView и UIViewController?
  • Как работает жизненный цикл UIViewController? Опишите каждый lifecycle-метод.
  • Как работает UITableView и каковы роли dataSource и delegate?

Типичные ошибки

  • Сводить «Auto Layout и как создавать constraints программно по сравнению с Interface Builder» к синтаксису и не объяснять reuse pool.
  • Игнорировать жизненный цикл, основной поток или момент освобождения ресурсов в сценарии uikit-4.
  • Выбирать API по привычке, не проверяя состояние, ошибки, доступность и платформенные ограничения.

Что проверяет интервьюер

  • Формулирует точную модель для «Auto Layout и как создавать constraints программно по сравнению с Interface Builder» и подтверждает ее корректным примером.
  • Умеет связать ответ с иерархия view controller, тестированием и отладкой на устройстве.
  • Называет ограничения подхода uikit-4, включая производительность, память и сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме UIKit →

Источники

  • https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/
Следующий вопрос→Как работает навигация в UIKit с помощью `UINavigationController`?

Связанные темы

UIKitimplementation-reasoningMobile-Engineeringui-rendering-performance