Cambiar marco programáticamente con diseño automático


Tengo un UITableView con Diseño automático y necesito reducir la altura cuando el GADBannerView aparece en la parte inferior de la pantalla.

Desafortunadamente con el Diseño automático es imposible modificar el marco. La solución es eliminar el diseño automático y establecer el marco manualmente. Esto es muy peligroso porque todas mis aplicaciones funcionan bien en la pantalla 3.5' y 4.0' y eliminar el diseño automático causando una nueva fase de prueba y más esfuerzo.

¿Hay alguna forma de cambiar el marco incluso si el diseño automático está habilitado ?

Author: Fry, 2014-05-14

4 answers

Deje que sus UITableView restricciones a la disposición inferior se establezca en 0, haga un IBOutlet. Ahora deja que tu GADBannerView altura sea 40 así que cambia tu outlet.constant = 40; Para más información sobre cómo hacer IBOutlet y cambiar su valor echa un vistazo a this o this espero que esto te ayude.

Edit: Para aquellos que buscan por ejemplo, siga estos sencillos pasos (Ya que esta es una respuesta aceptada, creo que vale la pena tener un ejemplo. Crédito a @manujmv para este ejemplo)

  1. Crear un restricción de altura para la vista en la interfaz.

  2. Luego agregue un objeto IBOutlet en su clase para esta restricción. Por ejemplo:

    @ propiedad (débil, no atómica) IBOutlet NSLayoutConstraint * heightConstraint;

Conecte este objeto en su panel de conexión.

  1. Luego cambie el valor de esta restricción cada vez que necesite

    Auto.Restricción de altura.constante = 40;

 62
Author: Bharat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:27

En lugar de intentar cambiar el marco de la vista, agregue una restricción de altura usando diseño automático y reduzca el valor de esta restricción. Haga los siguientes pasos:

  1. cree una constarint de altura para su vista en su interfaz.
  2. Luego agregue un objeto IBOutlet en su clase para esta restricción. por ejemplo,

     @property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
    

    Conecte este objeto en su panel de conexión.

  3. Luego cambie el valor de esta restricción cada vez que necesario

     self.heightConstraint.constant = 40;
    
 41
Author: manujmv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-14 12:54:34

Una cosa más, tienes que llamar al método [self.view layoutIfNeeded]; una vez que cambies las restricciones.

Disfruta :)

 8
Author: RJ168,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-13 09:19:15

Puede encontrar una restricción como esa

extension UIView {
    var heightConstaint: NSLayoutConstraint? {
        get {
            for constraint: NSLayoutConstraint in constraints {
                if constraint.firstAttribute == .height {
                    if constraint.relation == .equal {
                        return constraint
                    }
                }
            }
            return nil
        }

        set{
            setNeedsLayout()
        }
    }
}
 0
Author: AshvinGudaliya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-31 07:05:46