Изменение размера суперпредставления после изменения высоты подпредставления - БЕЗ АВТОМАТИЧЕСКОГО РАЗМЕЩЕНИЯ - PullRequest
0 голосов
/ 18 мая 2018

Google всегда дает результаты для автоматического размещения, когда я спрашиваю об этом.
У меня есть пользовательское представление, которое имеет несколько подпредставлений.Один из подпредставлений имеет 2 подпредставления.

Superview  
  - Subview 1  
  - Subview 2  
     - Subview 21  
     - Subview 22   
  - Subview 3  

При некоторых действиях с кнопками я скрываю одно из внутренних подпредставлений (Subview 22).И после этого я обновляю высоту внешнего подпредставления (Subview 2).

subheader.frame = CGRect(x: subheader.frame.origin.x, y: subheader.frame.origin.y, width: subheader.frame.size.width, height: 0)
subheader.isHidden = true
viewTop.frame = CGRect(x: viewTop.frame.origin.x, y: viewTop.frame.origin.y, width: viewTop.frame.size.width, height: 60)  
self.layoutSubviews()

подзаголовок является подпредставлением viewTop , а viewTop является подпредставлением родительского представления.
Проблема заключается в том, что высота viewTop не изменяется.
Примечание : viewTop имеет градиентный фон :

viewTop.setViewGradientBackground(UIColor(red: 228.0 / 255.0, green: 221.0 / 255.0, blue: 135.0 / 255.0, alpha: 1.0), backgroundColorBottom: UIColor(red: 150.0 / 255.0, green: 129.0 / 255.0, blue: 32.0 / 255.0, alpha: 1.0))  

extension UIView
{
    func setViewGradientBackground(_ backgroundColorTop: UIColor, backgroundColorBottom: UIColor)
    {
        let btnGradient = CAGradientLayer()
        btnGradient.frame = self.bounds
        btnGradient.colors = [backgroundColorTop.cgColor as CGColor, backgroundColorBottom.cgColor as CGColor]
        self.layer.insertSublayer(btnGradient, at: 0)
    }
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Если вы не используете NSLayoutConstraints и не настроили маски с автоматическим изменением размера, тогда вы сами отвечаете за обновление фреймов.layoutSubviews применяет макет на основе ограничений;без этого знания он не способен на многое.

Самый простой способ, который я могу себе представить, - это просто позвонить viewTop.superview?.frame = ... и обновить его вручную, если вы действительно не хотите идти по пути автоматической разметки.

0 голосов
/ 18 мая 2018

self.layoutSubviews () не будет работать в этом случае.Это будет работать только при использовании авто макетов.Поскольку вы управляете кадрами вручную, вы должны устанавливать кадры для всех суперпредставлений и подпредставлений всякий раз, когда вы меняете кадр одного вида.Это сложная вещь.

Попробуйте реализовать автоматические макеты.Авто макеты легко справятся с подобными вещами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...