2014-08-28 3 views
5

मुझे systemLayoutSizeFittingSize: विधि का एक अलग व्यवहार मिला, तो मुझे उम्मीद थी।systemLayoutSizeFittingSize: UILabel पर अपेक्षित व्यवहार की तरह व्यवहार नहीं कर रहा

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

मैं उम्मीद है कि layoutSize और intrinsicSize ही कर रहे हैं:

यहाँ एक तेज खेल का मैदान है जो व्यवहार लेकिन ऑब्जेक्टिव-सी में अपने ही दर्शाता है के लिए कतरना एक कोड है।

लेकिन इस मामले layoutSize(w 173, h 20) है में और intrinsicSize(w 40, h 104)

मैं दोनों intrinsicSize होने की अपेक्षा करेंगे है लेकिन यह systemLayoutSizeFittingSize: पर ध्यान नहीं देता preferredMaxLayoutWidth

है किसी ने मुझे इसकी व्याख्या करने में सक्षम है?

संपादित करें: इसके अलावा

label.setNeedsLayout() 
label.layoutIfNeeded() 

let layoutSize = label.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 

let intrinsicSize = label.intrinsicContentSize() 

परिणाम

उत्तर

3

आंतरिक आकार परिवर्तन नहीं करता है सामग्री के दृष्टिकोण की गणना है, और आप अपेक्षित परिणाम अपने उदाहरण में मिलता है। दूसरी ओर लेआउटसाइज दृश्य की बाधाओं पर निर्भर करता है, क्योंकि आपने किसी भी सिस्टम को डिफ़ॉल्ट रूप से उपयोग नहीं किया है जो आंतरिक आकार का उपयोग नहीं करता है। लेकिन यदि आप लेबल में कुछ बाधाओं को जोड़ते हैं, यानी लंबवत और क्षैतिज दृश्य में केंद्र, तो अंततः लेआउट निर्धारित करने के लिए सिस्टम अंतर्निहित सामग्री आकार का उपयोग करेगा और दोनों आकार समान होंगे।

उद्देश्य-सी में

कोड उदाहरण:

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

इस मामले उत्पादन होता है के लिए:

2015-01-29 01:00:46.265 test[31327:911898] 
layout: {38.5, 130.5} 
intrinsicSize:{38.5, 130.5} 
संबंधित मुद्दे