Адаптивное ограничение автозапуска в UICollectionViewHeader

#ios #swift #nslayoutconstraint #uicollectionviewflowlayout

#iOS #swift #nslayoutconstraint #uicollectionviewflowlayout

Вопрос:

В UICollectionViewHeader этот код изменяет размер всего идеально, когда заголовок находится на экране, но если я прокручиваю вниз (например, до нижнего колонтитула) и меняю ориентацию, пока нижний колонтитул находится на экране, заголовок не обновляет ограничения и изменение размера не происходит.

 func observeOrientation() {
    NotificationCenter.default.addObserver(self, selector: #selector(refreshImageConstraints), name: UIDevice.orientationDidChangeNotification, object: nil)
}

@objc func refreshImageConstraints() {
    NSLayoutConstraint.deactivate([headImageWidth, headImageHeight, stackWidth])
    
    if frame.width > frame.height {
        headImageWidth = headImage.widthAnchor.constraint(equalToConstant: frame.width * (6/7))
        headImageHeight = headImage.heightAnchor.constraint(equalToConstant: frame.height * (3/6))
        stackWidth = stack.widthAnchor.constraint(equalToConstant: frame.width * (5/7))
    } else {
        headImageWidth = headImage.widthAnchor.constraint(equalToConstant: frame.width * (6/7) )
        headImageHeight = headImage.heightAnchor.constraint(equalToConstant: frame.width * (3/6))
        stackWidth = stack.widthAnchor.constraint(equalToConstant: frame.width * (6/7))
    }
    NSLayoutConstraint.activate([headImageWidth, headImageHeight, stackWidth])
    print("DEBUG: Did change orientation")
}
 

Комментарии:

1. Есть ли конкретная причина, по которой вы вычисляете константу вместо использования multiplier ?

2. Нет, на самом деле, я, скорее всего, исправлю это, когда проведу рефакторинг кода.