Pourquoi la size de la view est (0,0) ?

colas_colas_ Membre
avril 2015 modifié dans API UIKit #1

Bonjour,


 


J'ai un problème avec une vue (issue d'un VC) que j'ajoute à  une autre vue. Après l'ajout, cette vue prend une size nulle. Je ne comprends pas pourquoi et j'aimerais le savoir. Je sais (et j'ai testé) que si je mets des contraintes, ça marchera.


 


Mais, dans ce cas, pourquoi ça ne marche pas ?


 


Merci !


 


 


• Voici le code de View Controller principal :



@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *mainView;
@property (nonatomic, strong, readwrite) ColorViewController * colorVC ;
@end

@implementation ViewController

+ (void)fillView:(UIView *)bigView
withView:(UIView *)view
{
view.translatesAutoresizingMaskIntoConstraints = NO ;
// view.translatesAutoresizingMaskIntoConstraints = YES ;

CGRect frame = bigView.frame ;
frame.origin = CGPointZero ;

view.frame = frame ;

[bigView addSubview:view] ;
}


- (void)viewDidLoad
{
[super viewDidLoad];

self.colorVC = [ColorViewController new] ;

UIView * newView = [UIView new] ;
newView.backgroundColor = [UIColor blackColor] ;

[ViewController fillView:self.mainView
withView:self.colorVC.view] ;
}


@end

• Voici le storyboard associé


 


Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur

    Pourquoi pas assigné le bounds au frame ?


     





    + (void)fillView:(UIView *)bigView
    withView:(UIView *)view
    {
    view.translatesAutoresizingMaskIntoConstraints = NO ;
    // view.translatesAutoresizingMaskIntoConstraints = YES ;

    view.frame = bigView.bounds ;

    [bigView addSubview:view] ;
    }


  • Oui ! Je n'ai jamais fait ça mais ça économise quelques ligne de codes un peu répétitives !


     


    Comme tu t'en doutais, ça ne règle pas le problème...


  • Quand j'essaie chez moi, je vois un rectangle rouge sur un fond blanc, sans le moindre bouton à  presser – c'est normal ?


     


    Tu es sûr que



    UIView * view = [[self.mainView subviews] firstObject] ;

    est bien l'objet souhaité?


  • Merci berfis !


     


    Voici un lien avec le projet github https://github.com/colasjojo/ToyProjectForIssueWithSize


     


    Si ça ne bugguait pas, oui tu devrais voir à  la place de la vue rouge une vue d'une autre couleur, avec un label dedans...


     


     


     


    Pour 



    UIView * view = [[self.mainView subviews] firstObject] ;

    oui, c'est bon.


     


     


    Sinon, il te suffit d'inverser



    //view.translatesAutoresizingMaskIntoConstraints = NO ;
    view.translatesAutoresizingMaskIntoConstraints = YES ;

    pour voir le bon comportement !


  • colas_colas_ Membre
    mai 2015 modifié #6

    Suite à  la même question posée sur SO, voici les conclusions


     


    • n'utiliser 

      view.translatesAutoresizingMaskIntoConstraints = NO ;

      que si on ajoute soi-même ses contraintes. Dans mon cas, je pensais que la frame serait suffisante, mais non, il doit y avoir un moteur !

     


    • C'est très bizarre car ça marche s'il n'y a pas de label dans mon xib ou si j'ajoute une vue créée via [UIView new]... Apparemment (on va dire ça en tout cas), c'est le fait que ça marche qui est anormal :(

    PS : pourquoi quand je crée une liste avec des points, elle n'apparaà®t pas dans mon message ?


    • point 1
    • point 2
  • Est-ce que tu as essayé d'appeler ton fillView dans le viewWillAppear ou dans le didLayoutSubview ?


  • colas_colas_ Membre
    mai 2015 modifié #8

    @starmendo : merci pour tes idées


     


    - dans viewWillAppear : même comportement non souhaité


    - dans viewDidLayoutSubviews : même comportement non souhaité


Connectez-vous ou Inscrivez-vous pour répondre.