Как изменить констрейнт


#21

Можно по-разному написать
No storyboard swift и тд.
Вот есть Видео


#22

Да, я только что его посмотрел… Типичная ситуация - создаешь вопрос на форуме и потом начинаешь понимать как найти его в интернете. Но у меня еще остались вопросы…

  1. Как создать второй контроллер, чтобы его было видно? Я так пологаю в этом же методе сцены?

  2. И еще, он создает это в SceneDelagate, но у меня поддержка с 11 версиии… Значит я должен делать это в AppDelegate?


#23

Я не знаю как в новом XCode,

в старом, чтоб сделать стартовый VC в аппделегате делаете так:

window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = viewController

class ViewController: UIViewColntroller { }

Я не очень понял вопрос, а именно Как сделать так, чтобы классы, которые я создаю, были как-то видно основному классу контроллера

В целом, если вы пользовались сигвеями и только, то для Вас откроется новый мир))
у контроллера есть ф-я present - для модального окна

И если у вас контроллеры находятся в навигационном стеке, то просто делать push
let vc = WorkDateVC()
navigationController?.pushViewController(vc, animated: true)

у меня обычно VM решает куда идти и передает case из енума, а VC обычно обрабатывает

Хранит ViewModel

enum To {
        case close
        case addresses(selected: AddressModel?)
        case noncontact(NoncontactVcInfo)
        case postponed(info: OrderBodyModel, completition: ((Date?) -> Void))
        ....
}

ViewController переходит

     func handle(to: To) {
            switch to {
            case .close:
                dismiss(animated: true, completion: nil)
                
            case .addresses(let selected):
                showNavBarWhenDisappear = true
                let vc = AddressesVC(from: .Order, currentAddress: selected)
                navigationController?.pushViewController(vc, animated: true)
            ....
    }

Также, чтобы не платить тонну верстки внутри контроллера, советую переопределять ф-ю loadView

**class** WorkDateVcView: UIView {
    ....
}

**class** WorkDateVC: UIViewController {
    lazy var contentView = WorkDateVcView(frame: UIScreen.main.bounds)

**override** **func** loadView() { view = contentView }

}

#24

Не все пока понятно, ладно буду разбираться дальше, спасибо за оперативный ответ!)))


#25

Так а что именно не понятно) Уточняйте, скучно мне сейчас)


#26

Ну вот например я создал первый контроллер без сториборда.

Теперь мне надо создать второй контроллер. Вы написали что создавать так:

class ViewController: UIViewColntroller { }

Я могу это создать в отдельном файле?

И когда я попытаюсь запушить его, он не будет выеживаться, что не может найти этот контроллер? Потому-что сейчас именно так. Хотя я сейчас еще попробую сделать, и дальше напишу что вышло


#27

В отдельном конечно)
Если он у вас не видел его,
Targets -> BuildPhases там в Complilie Source + и посмотреть добавлен он или нет, а вообще перезапустите xCode, это странно


#28

Ну это ладно, там скорее всего я не верно что-то сделал… сейчас делаю поп порядку… до этого дойдем. У меня вот другой вопрос. В видео показано как он инициализирует основнйо контроллер в SceneDelegate… Но! Так как у меня стоит поддержка 11+ версии, то мне пришлось поставить

@available(iOS 13.0, *) 
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
...

Окей, в симуляторе у меня все запускается… Но что будет в версии ниже 13й? Как это должно инициализироваться там? В симуляторе нет даже возможности проверить это на версии ниже, что делать?


#29

Установите поддерживаемую версию

56%20PM


#30

Эмм. Не совсем понял. Так у меня сейчас стоит v11, iPhone/iPad. Мне так нужно.
Это будет работать в версиях ниже?


#31

у вас должен быть доступен симулятор ниже 13-й версии

Если вам нужны симуляторы более низких версий, их можно установить


#32

установил, не работает. Черный экран просто. Ну это логично… и как быть?


#33

Попробуйте тут посмотреть


#34

здесь тоже самое, описано под SceneDelegate. Но этого класса нет в версиях ниже 13


#35

раньше все было в appDelegate


#36

ну вот у appDelegate нету свйоства window… я даже хз как туда это впихнуть чтобы работало… не понимаю


#37

я не трогал новый sceneDelegate еще
Можете просто избавиться от scene delegate и вернуть старый appDelegate


#38

я добавил свойство window классу AppDelegate, вобщем заработало… Но только вот для IOS 13 этот же код должен быть в SceneDelegate, иначе там будет черный экран… Но получается тогда дублирование кода… это как-то странно… врятли это должно так работать…


#39

просто выпилить SceneDelegate я не могу, ибо для поддержки IOS 13 он должен быть… ругаться начинает


#40

Вы считаете что приложения написанные год назад не запустится на новых устройствах :thinking: