2014-08-28 5 views
5

Ich fand ein anderes Verhalten der systemLayoutSizeFittingSize: Methode dann habe ich erwartet. HiersystemLayoutSizeFittingSize: auf UILabel verhält sich nicht wie erwartet

ist ein Code für einen schnellen Spielplatz snipped, die das Verhalten aber sein das gleiche in Objective-C zeigt:

import UIKit 
import Foundation 

var label = UILabel() 

label.text = "This is a Test Label Text" 

label.numberOfLines = 0 

label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody) 

label.preferredMaxLayoutWidth = 40 

let layoutSize = label.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 

let intrinsicSize = label.intrinsicContentSize() 

ich erwartet hätte, dass layoutSize und intrinsicSize gleich sind.

aber in diesem Fall layoutSize ist (w 173, h 20) und intrinsicSize ist (w 40, h 104)

Ich würde beide erwarten, dass die intrinsicSize sein, aber es scheint systemLayoutSizeFittingSize: die es mir zu erklären preferredMaxLayoutWidth

Ist jemand in der Lage ignoriert?

Edit: Auch

label.setNeedsLayout() 
label.layoutIfNeeded() 

let layoutSize = label.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 

let intrinsicSize = label.intrinsicContentSize() 

nicht die Ergebnisse ändern

Antwort

3

Die innere Größe ist die Berechnung der Auffassung des Inhalts, und Sie erhalten die erwarteten Ergebnisse in Ihrem Beispiel. Andererseits hängt layoutSize von den Beschränkungen der Ansicht ab, da Sie keine Standardverwendungen für die Systemverwendung definiert haben, die nicht die intrinsische Größe verwenden. Wenn Sie jedoch dem Etikett eine Reihe von Einschränkungen hinzufügen, d. H. In der Ansicht vertikal und horizontal zentrieren, verwendet das System die tatsächliche Inhaltsgröße, um das Layout endgültig zu bestimmen, und beide Größen sind identisch.

Code-Beispiel in Objective-C:

//This code assume you have a UILabel as IBOutlet named testLabel with two constrains 
// to center the view, then in "viewDidLoad:" 
self.testLabel.text [email protected]"This is a Test Label Text"; 
self.testLabel.font = [UIFont preferredFontForTextStyle:(UIFontTextStyleBody)]; 
self.testLabel.numberOfLines = 0; 
self.testLabel.preferredMaxLayoutWidth = 40; 


CGSize layoutSize1 = [_testLabel systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 

CGSize intrinsicSize1 = [_testLabel intrinsicContentSize]; 

NSLog(@"\nlayout:%@\nintrinsicSize:%@",NSStringFromCGSize(layoutSize1),NSStringFromCGSize(intrinsicSize1)); 

Für diesen Fall ist der Ausgang:

2015-01-29 01:00:46.265 test[31327:911898] 
layout: {38.5, 130.5} 
intrinsicSize:{38.5, 130.5} 
Verwandte Themen