Size: a a a

iOS Developers — русскоговорящее сообщество

2019 October 26

P

Paulik8 in iOS Developers — русскоговорящее сообщество
подскажите, плз, почему после дабл поворота эмблема логина плывет наверх
Во viewWillTransition через DispatchQueue.main.async вызываю эту функцию, но все равно не помогает
private func activateConstraints() {
       let width = view.safeAreaLayoutGuide.layoutFrame.width / 5
       print ("activate", view.safeAreaLayoutGuide.layoutFrame.height, view.safeAreaLayoutGuide.layoutFrame.origin.y)
       let topAnchor = view.safeAreaLayoutGuide.layoutFrame.height / 6
       let reserveTop = view.safeAreaLayoutGuide.layoutFrame.height / 16
       
       NSLayoutConstraint.activate([
           
           login.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: width + 8),
           login.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
           login.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: topAnchor),
           login.heightAnchor.constraint(equalToConstant: login.frame.height),

           name.topAnchor.constraint(equalTo: login.bottomAnchor, constant: reserveTop),
           name.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: width),
           name.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -width),
           name.heightAnchor.constraint(equalToConstant: name.frame.height),

           password.topAnchor.constraint(equalTo: name.bottomAnchor, constant: 24),
           password.leadingAnchor.constraint(equalTo: name.leadingAnchor),
           password.trailingAnchor.constraint(equalTo: name.trailingAnchor),
           password.heightAnchor.constraint(equalToConstant: password.frame.height),
           
           button.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 16),
           button.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16),
           button.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -reserveTop),
           button.heightAnchor.constraint(equalToConstant: button.frame.height)
       ])
   }
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
источник

НС

Николай Савенков in iOS Developers — русскоговорящее сообщество
Stan Hartmann
Просто обращаемся к своему searchbar и делаем becomeFirstResponder
Получилось, заработало
источник

TF

Tung Fam in iOS Developers — русскоговорящее сообщество
Paulik8
подскажите, плз, почему после дабл поворота эмблема логина плывет наверх
Во viewWillTransition через DispatchQueue.main.async вызываю эту функцию, но все равно не помогает
private func activateConstraints() {
       let width = view.safeAreaLayoutGuide.layoutFrame.width / 5
       print ("activate", view.safeAreaLayoutGuide.layoutFrame.height, view.safeAreaLayoutGuide.layoutFrame.origin.y)
       let topAnchor = view.safeAreaLayoutGuide.layoutFrame.height / 6
       let reserveTop = view.safeAreaLayoutGuide.layoutFrame.height / 16
       
       NSLayoutConstraint.activate([
           
           login.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: width + 8),
           login.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
           login.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: topAnchor),
           login.heightAnchor.constraint(equalToConstant: login.frame.height),

           name.topAnchor.constraint(equalTo: login.bottomAnchor, constant: reserveTop),
           name.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: width),
           name.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -width),
           name.heightAnchor.constraint(equalToConstant: name.frame.height),

           password.topAnchor.constraint(equalTo: name.bottomAnchor, constant: 24),
           password.leadingAnchor.constraint(equalTo: name.leadingAnchor),
           password.trailingAnchor.constraint(equalTo: name.trailingAnchor),
           password.heightAnchor.constraint(equalToConstant: password.frame.height),
           
           button.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 16),
           button.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16),
           button.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -reserveTop),
           button.heightAnchor.constraint(equalToConstant: button.frame.height)
       ])
   }
в консоли есть лейаут ворнинги?
источник

РЛ

Руслан Лутфуллин in iOS Developers — русскоговорящее сообщество
login.heightAnchor.constraint(equalToConstant: login.frame.height),``
источник

РЛ

Руслан Лутфуллин in iOS Developers — русскоговорящее сообщество
за такое конечно...
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
Tung Fam
в консоли есть лейаут ворнинги?
есть
источник

TF

Tung Fam in iOS Developers — русскоговорящее сообщество
Paulik8
есть
знаешь как их починить ?
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
Tung Fam
знаешь как их починить ?
нет, но я думаю он ругается на то, что я дергаю NSLayoutConstraint.activate при каждом повороте экрана
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
"<NSLayoutConstraint:0x60000286a0d0 UILabel:0x7fac005010d0'Log In'.leading == UILayoutGuide:0x60000325c0e0'UIViewSafeAreaLayoutGuide'.leading + 90.8   (active)>",
   "<NSLayoutConstraint:0x600002857980 UILabel:0x7fac005010d0'Log In'.leading == UILayoutGuide:0x60000325c0e0'UIViewSafeAreaLayoutGuide'.leading + 187.2   (active)>"
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
я просто не знаю, как еще ему сказать что нужно обновить экран, потому что размеры frame поменялись
источник

TF

Tung Fam in iOS Developers — русскоговорящее сообщество
да. дело в том что ты не можешь сетить например 2 констрейнта на высоту. даже если это будет одинаковое значение.

например засетить хайт 100 и потом еще раз хайт 100 оно будет ругаться.

то есть ты не можешь сетить при каждом повороте экрана констрейнт.

я не знаю что ты пытаешься сделать но возможно тебе это поможет: если тебе в зависимости от положения экрана надо менять констрейнты то тебе нужно активировать те которые надо и деактивировать те которые не надо.

тебе надо хранить ссылку на констрейнт и делать isActive = true/false по той логике что тебе нужно

понял?
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
я мысль понял
мне нужно менять topAnchor при повороте экрана, потому что его значение зависит от высоты view (в вертикальном положении view.frame.height > чем в горизонтальном)
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
как тогда мне менять значение для topAncho, если нельзя сетить два разных значения?
источник

TF

Tung Fam in iOS Developers — русскоговорящее сообщество
тебе нужно создать 2 констрейнта и "сохранить" их в скоупе класса (вне метода)

присвоить этим двум констрейнтам значение

в методе который вызывается при повороте экрана ставить isActive true той которую надо. и isActive false той которую хочешь выключить.

понял?
источник

РЛ

Руслан Лутфуллин in iOS Developers — русскоговорящее сообщество
@Paulik8 Зачем ты городишь такие костыли? Если ты используешь сториборд, то прочитай https://www.raywenderlich.com/1343912-adaptive-layout-tutorial-in-ios-12-getting-started и с новыми знанями уже поймешь как сделать то что ты хочешь.

Если ты хочешь это сделать из кода. То у контроллера есть метод traitCollectionDidChange внутри которого ты можешь посмотреть у UITraitCollection св-во preferredContentSizeCategory. Почитай про UIContentSizeCategory. Соотвественно при изменении этого св-ва, ты активируешь нужные констреинты для того или иного вида.

И сами констреинты в 99% случаях не должы быть привязаны к frame.
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
Tung Fam
тебе нужно создать 2 констрейнта и "сохранить" их в скоупе класса (вне метода)

присвоить этим двум констрейнтам значение

в методе который вызывается при повороте экрана ставить isActive true той которую надо. и isActive false той которую хочешь выключить.

понял?
да спасибо
источник

P

Paulik8 in iOS Developers — русскоговорящее сообщество
Руслан Лутфуллин
@Paulik8 Зачем ты городишь такие костыли? Если ты используешь сториборд, то прочитай https://www.raywenderlich.com/1343912-adaptive-layout-tutorial-in-ios-12-getting-started и с новыми знанями уже поймешь как сделать то что ты хочешь.

Если ты хочешь это сделать из кода. То у контроллера есть метод traitCollectionDidChange внутри которого ты можешь посмотреть у UITraitCollection св-во preferredContentSizeCategory. Почитай про UIContentSizeCategory. Соотвественно при изменении этого св-ва, ты активируешь нужные констреинты для того или иного вида.

И сами констреинты в 99% случаях не должы быть привязаны к frame.
спасибо
источник

S

Sergey in iOS Developers — русскоговорящее сообщество
Как можно валидно авторизовать юзера на своем сервере, который совершил инапп?
А если это подписка?
источник