19
Simplificando Auto Layout via código Uma abordagem simples utilizando formato visual (VFL)

Simplificando Auto Layout via código

Embed Size (px)

Citation preview

Page 1: Simplificando Auto Layout via código

Simplificando Auto Layout via código

Uma abordagem simples utilizando formato visual (VFL)

Page 2: Simplificando Auto Layout via código

Alécio Gomes

25 anosDesenvolvedor desde 2006Fundador da Sparta Labs

Page 3: Simplificando Auto Layout via código

frame nunca mais!

Page 4: Simplificando Auto Layout via código

translatesAutoresizingMaskIntoConstraints

UIView *view = [UIView new]; view.translatesAutoresizingMaskIntoConstraints = NO; view...

@implementation UIView (Autolayout)

+ (id)autolayoutView { UIView *view = [self new]; view.translatesAutoresizingMaskIntoConstraints = NO; return view; }

@end

Page 5: Simplificando Auto Layout via código

A maneira difícil

- (void)loadView { self.view = [UIView new];

UIView *myView = [UIView autolayoutView]; [self.view addSubview:myView];

...

Page 6: Simplificando Auto Layout via código

A maneira difícil

+ (NSLayoutConstraint *) [NSLayoutConstraint constraintWithItem:myView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:10]];

Para ancorar a esquerda:

Page 7: Simplificando Auto Layout via código

cê ta de brinks né?

Page 8: Simplificando Auto Layout via código

Visual Format Language

+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views

Page 9: Simplificando Auto Layout via código

views

// São todos a mesma coisa NSDictionaryOfVariableBindings(v1, v2, v3);

[NSDictionary dictionaryWithObjectsAndKeys:v1, @“v1”, v2, @“v2”, v3, @“v3”, nil];

@{@“v1”: v1, @“v2”: v2, @“v3": v3};

Page 10: Simplificando Auto Layout via código

metrics

NSDictionary *metrics = @{@"buttonWidth":@200.0};

Page 11: Simplificando Auto Layout via código

options

NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom

Em um layout horizontal:

NSLayoutFormatAlignAllLeft | NSLayoutFormatAlignAllRight

Em um layout vertical:

NSLayoutFormatAlignAllCenterY

Em um layout horizontal:

Page 12: Simplificando Auto Layout via código

format

[label]

Views são representadas dentro de colchetes:

|A superview é representada por um pipe:

|-[label]-|

Espaçamento são representadas por um hífen:

V:|-[label]-|

Orientação:

Page 13: Simplificando Auto Layout via código

format (spacing)

|-30.0-[button]-30.0-|

Espaçamento pode ser explícito:

NSDictionary *metrics = @{@“spacing”: @30}; |-spacing-[button]-spacing-|

E constantizado:

Page 14: Simplificando Auto Layout via código

format (size)

[label(200)] [label(labelWidth)]

O size pode ser explícito:

|-[button1(button2)]-[button2]-|

Ou referenciado:

Page 15: Simplificando Auto Layout via código

DemoDisponível em: https://github.com/CocoaHeadsBNU/VFL-sample

Page 16: Simplificando Auto Layout via código

Conclusão

• Conceito simples de aprender

• Flexível

• Porém limitado (constantes, ratio e center)

Page 17: Simplificando Auto Layout via código

Dúvidas?

Page 18: Simplificando Auto Layout via código

Obrigado!

aleciogomes

Page 19: Simplificando Auto Layout via código

Fontes/Further Reading

• https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage/VisualFormatLanguage.html

• http://commandshift.co.uk/blog/2013/01/31/visual-format-language-for-autolayout/

• http://code.tutsplus.com/tutorials/introduction-to-the-visual-format-language--cms-22715 (Swift)