2015-05-19 11 views
9

मैं ऑटोलायआउट एक्सकोड प्लेग्राउंड में बाधाओं के साथ कॉन्फ़िगर किए गए दृश्य प्रदर्शित करने का प्रयास कर रहा हूं, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। यह खेल के मैदान की तरह बाधाओं को पूरी तरह से अनदेखा करता है, और मुझे कहीं भी इस मुद्दे के बारे में जानकारी नहीं मिल रही है।मैं एक्सकोड खेल के मैदान में ऑटोलायआउट बाधाओं का उपयोग करके विचार कैसे प्रदर्शित कर सकता हूं?

let view = UIView() 
view.frame = CGRectMake(0, 0, 400, 200) 
view.backgroundColor = UIColor.lightGrayColor() 

let label = UILabel() // I can only see the label if I set a frame 
     // UILabel(frame: CGRectMake(0, 0, 200, 50)) 
label.backgroundColor = UIColor.greenColor() 
label.text = "I am a label" 
label.setTranslatesAutoresizingMaskIntoConstraints(false) 
view.addSubview(label) 

let views = ["label":label] 
let options = NSLayoutFormatOptions(0) 

let cs1 = NSLayoutConstraint.constraintsWithVisualFormat(
    "H:|-[label]-|", options: options, metrics: nil, views:views) 

let cs2 = NSLayoutConstraint.constraintsWithVisualFormat(
    "V:|-[label]-|", options: options, metrics: nil, views:views) 

view.addConstraints(cs1) 
view.addConstraints(cs2) 

अग्रिम

+1

xcplayground आयात करें और फिर XCPShowView –

+1

का उपयोग करें आपको लेआउट के लिए कॉल की आवश्यकता हो सकती है IfNeeded –

+0

धन्यवाद डैनियल! हाँ, ऐसा लगता है कि मुझे दोनों चीजों की ज़रूरत है। यदि आप चाहते हैं तो आप एक उत्तर लिख सकते हैं ताकि मैं इसे चिह्नित कर सकूं। –

उत्तर

14

धन्यवाद कहा जा रहा है तो आप अपने यूआई पूर्वावलोकन करने के लिए PlaygroundPage की liveView संपत्ति का उपयोग कर सकते हैं:

यहाँ कोड मैंने कोशिश की है।

import PlaygroundSupport 

PlaygroundPage.current.needsIndefiniteExecution = true 
PlaygroundPage.current.liveView = myLiveView 

यहां link है जो इस पर विस्तार करता है।

तो अपने काम नहीं कर आप एक layoutIfNeeded को गति प्रदान करने के लिए कि वास्तव में स्विफ्ट 4

इसके अलावा के बाद से इस मुद्दे को हल करना चाहिए आवश्यकता हो सकती है लेकिन, अपने दृश्य पर translatesAutoresizingMaskIntoConstraints = false शामिल हैं। जैसा:

import PlaygroundSupport 

myLiveView.translatesAutoresizingMaskIntoConstraints = false 
PlaygroundPage.current.needsIndefiniteExecution = true 
PlaygroundPage.current.liveView = myLiveView 
+0

धन्यवाद! 'XCPlayground आयात करें' और 'XCPShowView ("देखें", देखें)' वही है जो मुझे चाहिए था। –

+1

एक्सकोड 8 में, आपको बहिष्कृत चेतावनियां मिलेंगी। 'आयात PlaygroundSupport' और 'Playground.current.liveView = view' का उपयोग करें। –

+0

मैं उलझन में हूं कि 'layoutIfNeeded' की आवश्यकता होगी। इसके बिना मेरा काम करता है। क्या आप एक उदाहरण दिखा सकते हैं जहां इसका उपयोग करना आवश्यक होगा? – Honey

0

ऐसा लगता है कि अब आप कुछ इस तरह करने की जरूरत है:

import UIKit 
import XCPlayground 

let main = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 700)) 
main.backgroundColor = .blackColor() 
XCPlaygroundPage.currentPage.liveView = main 

// now add views and constraints to main 

main // display view 
+1

स्वीकार किए गए प्रश्न पर टिप्पणी करने के लिए यह अधिक विनम्र है कि उत्तर को केवल अपना वोट लेने और प्रश्न का उत्तर देने के लिए उत्तर को अद्यतन करने की आवश्यकता है । –

+0

ठीक है, डैनियल, मैं आपका निशान वापस दे सकता हूं। मैंने बस उन लोगों के बारे में सोचा जो तुरंत स्वीकार किए गए उत्तर की तलाश में हैं। –

+2

मुझे पता है, लेकिन लोगों के लिए अपने सभी उत्तरों को अद्यतित रखना संभव नहीं है और डिफ़ॉल्ट हमेशा वोटों द्वारा क्रमबद्ध करना है ताकि पोस्टर को यह बताने के लिए बेहतर अभ्यास हो :) एक अच्छा दिन है! –

0

मेरे अंतिम कोड;

आप केवल पीले बाहरी UIView तो देखते हैं, तो निश्चित रूप से की जरूरत है:

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

और यकीन है कि दृश्य बनाने के लिए लेबल

label.text = "I am a label3 " 

पूर्ण कोड का पाठ बदलने अपडेट कर रहा है

import UIKit 
import XCPlayground 

//http://stackoverflow.com/questions/30333323/how-can-i-display-views-using-autolayout-constraints-in-xcode-playground/30336502#30336502 




let view = UIView() 
view.frame = CGRectMake(0, 0, 300, 200) 
view.backgroundColor = UIColor.yellowColor() 

//------------------------------------------------------------- 

XCPlaygroundPage.currentPage.liveView = view 
//needed else label may not appear 
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 


//------------------------------------------------------------- 
//LABEL 
//------------------------------------------------------------- 
let label = UILabel(frame: CGRectMake(0, 0,200, 50)) 
label.backgroundColor = UIColor.greenColor() 
label.textColor = UIColor.redColor() 

//TO FORCE REFRESH change text of label 
label.text = "I am a label3 " 

//add constraints 
label.translatesAutoresizingMaskIntoConstraints = false 

//COULDNT GET TO WORK 
view.addSubview(label) 


//-------------------------------------------------------------- 
//COMMENT OUT TO SEE LABEL with out constraints 
//-------------------------------------------------------------- 
let views = ["label":label] 
let options = NSLayoutFormatOptions(arrayLiteral:[]) 

let cs1 = NSLayoutConstraint.constraintsWithVisualFormat(
    "H:|-[label]-|", options: options, metrics: nil, views:views) 

let cs2 = NSLayoutConstraint.constraintsWithVisualFormat(
    "V:|-[label]-|", options: options, metrics: nil, views:views) 

view.addConstraints(cs1) 
view.addConstraints(cs2) 

//XCPlaygroundPage.currentPage.liveView = view 
संबंधित मुद्दे