2012-09-25 7 views
0

J'ai un problème avec la nouvelle fonctionnalité de mise en page automatique. J'ajoute un NSView appelé tableView en tant que sous-vue de workingBox. workingBox contient également d'autres subviews qui ont été ajoutés avec Interface BuilderComment arrêter la redimensionnement d'une sous-vue NSView avec la mise en page automatique

[self.window setFrame:frame display:YES animate:YES]; 
[workingBox addSubview:tableView]; 

Mon problème est que si l'un des autres sous-vues toucher tableView alors ils seront redimensionnées dans l'animation. Les sous-vues qui ne sont pas proches de l'ajout de tableView conservent la taille correcte. J'ai déjà essayé de définir NSViewNotSizable resizeMask sur les sous-vues qui sont redimensionnées mais cela ne fonctionne pas. La seule chose qui fonctionne est le déplacement de la sous-vue vers le haut (dans la mauvaise position


EDIT:. J'ai ajouté une contrainte dans le code:

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(divider); 
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[divider(==1)]" 
                   options:0 
                   metrics:nil 
                   views:viewsDictionary]; 
[workingBox addConstraints:constraints]; 

Cela permet de maintenir la NSView à 1px hauteur, mais si je le verrouiller en haut empêche la croissance de la vue

+0

Pouvez-vous télécharger une image avec le phénomène que vous décrivez et ajouter du code plus pertinent? – Sagiftw

+0

Je pense que la clé de cette est basée sur ceci: [Supposons que vous faites glisser un champ de texte hors de la bibliothèque, l'enclenchez dans le coin inférieur gauche d'une fenêtre, puis faites glisser-redimensionner le bord droit jusqu'à ce qu'il s'enclenche dans le coin inférieur . Rien de plus n'est nécessaire pour spécifier que lorsque la fenêtre est redimensionnée, le champ de texte doit s'étendre horizontalement] (https://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/Introduction.html) Je devine que j'ai besoin d'ajouter une contrainte avec du code pour remplacer celle qui est ajoutée en fonction du positionnement du NSView – petenelson

Répondre

0

Je ne pouvais pas faire cela en ajoutant une contrainte dans le code, mais dans Interface Builder, je pouvais voir qu'il y avait une contrainte pour le NSView en question qui s'appelait 'Bottom Alignment' J'ai changé cela en une priorité de 1 dans les pector et il a arrêté le NSView se étirer quand la fenêtre s'est étendue. Je pense que cette contrainte ajoutée automatique que j'ai mentionné dans mon commentaire ci-dessus avait été le problème tout le long.

+0

Parce que ma disposition était à peu près corrigée, j'ai décidé d'abandonner Auto Layout à la fin car cela causait trop de complications. Je suis retourné à l'essentiel et j'ai tout décoré de la manière traditionnelle et tout a été bon. – petenelson

Questions connexes