web-dev-qa-db-fra.com

Changer le cadre par programme avec la mise en page automatique

J'ai un UITableView avec Autolayout et j'ai besoin de réduire la hauteur lorsque le GADBannerView apparaît en bas de l'écran.

Malheureusement avec Autolayout il est impossible de modifier le cadre. La solution consiste à supprimer la mise en page automatique et à définir le cadre manuellement. C'est très dangereux car toutes mes applications fonctionnent correctement sur les écrans 3,5 'et 4,0' et la suppression de la mise en page automatique provoque une nouvelle phase de test et plus d'efforts.

Existe-t-il un moyen de changer de cadre même si la mise en page automatique est activée?

42
Fry

Laissez vos UITableView contraintes à la mise en page inférieure est définie sur 0, faites un IBOutlet. Maintenant, laissez votre GADBannerView hauteur 40, alors changez votre outlet.constant = 40; Pour en savoir plus sur la façon de créer IBOutlet et de modifier sa valeur, consultez this ou this espérons que cela vous aidera.

Edit: Pour ceux qui recherchent par exemple, suivez ces étapes simples (Parce que c'est une réponse acceptée, je pense qu'il vaut la peine d'avoir un exemple. @manujmv pour cet exemple)

  1. Créez une contrainte de hauteur pour votre vue dans votre interface.

  2. Ajoutez ensuite un objet IBOutlet dans votre classe pour cette contrainte. Par exemple:

    @property (faible, non anatomique) IBOutlet NSLayoutConstraint * heightConstraint;

Connectez cet objet dans votre panneau de connexion.

  1. Modifiez ensuite la valeur de cette contrainte chaque fois que vous en avez besoin

    self.heightConstraint.constant = 40;

64
Bharat

Plutôt que d'essayer de modifier le cadre de la vue, ajoutez une contrainte de hauteur à l'aide de la disposition automatique et réduisez la valeur de cette contrainte. Suivez les étapes ci-dessous:

  1. créer une constante de hauteur pour votre vue dans votre interface.
  2. Ajoutez ensuite un objet IBOutlet dans votre classe pour cette contrainte. par exemple,

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

    Connectez cet objet dans votre panneau de connexion.

  3. Modifiez ensuite la valeur de cette contrainte chaque fois que vous en avez besoin

     self.heightConstraint.constant = 40;
    
41
manujmv

Encore une chose, vous devez appeler la méthode [self.view layoutIfNeeded]; Une fois que vous avez modifié les contraintes.

Prendre plaisir :)

7
RJ168

Vous pouvez trouver une contrainte comme ça

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()
        }
    }
}
1
AshvinGudaliya