2015-05-19 16 views
9

Tôi đang cố gắng hiển thị các chế độ xem được định cấu hình với các ràng buộc autolayout trong XCode sân chơi, nhưng dường như không hoạt động. Nó giống như sân chơi bỏ qua các ràng buộc hoàn toàn, và tôi không thể tìm thấy thông tin về vấn đề này ở bất cứ đâu.Làm cách nào để hiển thị chế độ xem bằng cách sử dụng các hạn chế tự động hoàn tất trong sân chơi Xcode?

Dưới đây là đoạn code tôi đã cố gắng:

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) 

Cảm ơn trước

+1

Nhập xcplayground và sau đó sử dụng XCPShowView –

+1

Bạn có thể cần một cuộc gọi đến layoutNếu được yêu cầu –

+0

Cảm ơn Daniel! Vâng, có vẻ như tôi cần cả hai thứ. Bạn có thể viết trả lời nếu bạn muốn vì vậy tôi có thể đánh dấu nó. –

Trả lời

14

đó đang được nói, bạn có thể sử dụng tài sản của liveViewPlaygroundPage để xem trước giao diện người dùng của bạn.

import PlaygroundSupport 

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

Đây là một link mở rộng thêm về điều này.

Nếu nó không làm việc bạn có thể cần phải kích hoạt một layoutIfNeeded nhưng điều đó nên không thực sự giải quyết vấn đề này kể từ Swift 4

Ngoài ra, bao gồm translatesAutoresizingMaskIntoConstraints = false trên quan điểm của bạn. Giống như:

import PlaygroundSupport 

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

Cảm ơn! 'nhập khẩu XCPlayground' và' XCPShowView ("xem", xem) 'là chính xác những gì tôi cần. –

+1

Trong Xcode 8, bạn sẽ nhận được cảnh báo không dùng nữa. sử dụng 'nhập PlaygroundSupport' và' Playground.current.liveView = view'. –

+0

Tôi bị nhầm lẫn là nơi cần bố trí 'layoutIfNeeded'. Công trình của tôi không có nó. Bạn có thể cho thấy một ví dụ khi sử dụng nó sẽ là phải không? – Honey

0

Có vẻ như rằng bây giờ bạn cần phải làm điều gì đó như thế này:

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

Chính sách lịch sự hơn khi nhận xét câu hỏi được chấp nhận rằng câu trả lời cần được cập nhật hơn là chỉ đơn giản là bỏ phiếu và tự trả lời câu hỏi . –

+0

Ok, Daniel, tôi có thể trả lại dấu ấn của bạn. Tôi chỉ nghĩ về những người nhanh chóng tìm kiếm câu trả lời được chấp nhận. –

+2

Tôi biết, nhưng không thể cho mọi người cập nhật tất cả câu trả lời của họ và mặc định luôn là sắp xếp theo phiếu để thực hành tốt hơn để cho người đăng biết biết :) Có một ngày tuyệt vời! –

0

mã cuối cùng của tôi;

Nếu bạn chỉ nhìn thấy UIView bên ngoài màu vàng thì chắc chắn bạn cần:

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

Và để đảm bảo xem được cập nhật thay đổi nội dung của nhãn

label.text = "I am a label3 " 

ĐẦY ĐỦ MÃ

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 
Các vấn đề liên quan