2014-08-28 17 views
5

systemLayoutSizeFittingSize: yönteminin farklı bir davranışını buldum. Ben layoutSize ve intrinsicSize aynı olduğunu umuyordumsystemLayoutSizeFittingSize: UILabel üzerinde beklendiği gibi davranmıyor

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() 

: Burada

davranışı ancak Objective-C yılında aynı gösteriyor hızlı bir Oyun için snipped bir koddur.

Ama bu durum layoutSize(w 173, h 20) olduğu ve intrinsicSize

(w 40, h 104)

ben hem intrinsicSize olmasını beklediğiniz

ama systemLayoutSizeFittingSize: bana anlatmaya preferredMaxLayoutWidth

mi birileri mümkün görmezden görünüyor?

Düzenleme: Ayrıca

label.setNeedsLayout() 
label.layoutIfNeeded() 

let layoutSize = label.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 

let intrinsicSize = label.intrinsicContentSize() 

sonuçları

cevap

3

içsel boyutu değişmez içeriğin görüş hesaplamadır ve sizin örnekte beklenen sonuçlar alır. Öte yandan, layoutSize, görünümün kısıtlamalarına bağlıdır, çünkü sistem boyutlarını kullanmayan varsayılanları tanımlıyorsunuz. Ancak, etikete bir kaç kısıtlama eklerseniz, yani dikey ve yatay olarak merkezde, sistem düzeni belirlemek için içsel içerik boyutunu kullanır ve her iki boyut da aynı olur.

amaç-c

Kod örneği:

2015-01-29 01:00:46.265 test[31327:911898] 
layout: {38.5, 130.5} 
intrinsicSize:{38.5, 130.5} 
: çıkış Bu durum için

//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));