Einstellung UIButton titleEdgeInsets und imageEdgeInsets langsam mit Autolayout

Ich habe eine Ansicht mit ein paar Knöpfe, verschiedene Größen. Alle von Ihnen hat einen Titel und ein Bild. Ich wollte das Bild oben, die Titel auf den Boden, zentriert. Dies funktioniert mit dem folgenden code:

- (void)centerAlignImageAndTextForButton:(UIButton*)button
{
    CGFloat spacing = 5;
    CGSize imageSize = button.imageView.frame.size;
    button.titleEdgeInsets = UIEdgeInsetsMake(0, -imageSize.width, -(imageSize.height + spacing), 0);
    CGSize titleSize = button.titleLabel.frame.size;
    button.imageEdgeInsets = UIEdgeInsetsMake(-(titleSize.height + spacing), 0, 0, -titleSize.width);
}

Jedoch, merke ich eine kleine pause vor dem Eintritt in diese Ansicht. Zeit-Profiler in den Instrumenten zeigt, dass Sie 99% der Zeit damit verbracht in viewDidLoad wird verursacht durch den Aufruf meiner Methode für die Schaltflächen:

283.0ms  -[XViewController viewDidLoad]
282.0ms    -[XViewController centerAlignImageAndTextForButton:]
141.0ms      -[UIButton imageView]
 98.0ms        -[UIView(Hierarchy) layoutBelowIfNeeded]
141.0ms      -[UIButton titleLabel]
103.0ms        -[UIView(Hierarchy) layoutBelowIfNeeded]

Verschiedenen layout-bezogenen Dinge bezeichnet werden, die innerhalb [UIView(Hierarchy) layoutBelowIfNeeded] wie [UIView(AdditionalLayoutSupport) recursiveLayoutEngineDidChange] oder [NSLayoutConstraint addToEngine].

Ich weiß, es wäre möglich, diese Abstände werden im Interface Builder, aber nicht nur das ist eine mühsame Arbeit (Notwendigkeit, zu 'erraten' die Breite des Texts); die app wird auch lokalisiert werden, so dass die Einsätze, die gut für eine Sprache, nicht für die anderen, wo der text die Größe unterscheidet sich (ich bin mit der Basis-Lokalisierung für storyboards, und .strings-Dateien, statt Sie zu duplizieren das gesamte storyboard für jede Sprache). Also bei mir scheint die Einstellung der Abstände programmatisch ist der Weg zu gehen, aber der lag verursacht, ist nicht wirklich akzeptabel.

Irgendwelche Gedanken, wie könnte dies gelöst?

  • Warum bist du nicht festgelegt auf layoutSubViews?
InformationsquelleAutor Robert B. | 2013-03-15
Schreibe einen Kommentar