2016-09-13 20 views
5

Tôi đang gặp khó khăn trong việc tìm hiểu cách bố trí các chế độ xem trong Playgrounds Swift cho iPad, mặc dù điều này cũng có thể liên quan đến người dùng Mac.Định cỡ lượt xem trực tiếp trong Swift Playground

Đoạn mã sau sẽ tạo chế độ xem có hình vuông màu đỏ (cũng là chế độ xem) gần mép của 'chế độ xem siêu, nhưng không chạm vào chúng.

let v = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) 
let sqv = UIView(frame: CGRect(x: 400, y: 400, width: 50, height: 50)) 
sqv.backgroundColor = .red 
v.addSubview(sqv) 
PlaygroundPage.current.liveView = v 

Kết quả không phải là điều bạn mong muốn:

enter image description here

tôi nghi ngờ tôi biết những gì đang xảy ra ở đây; lượt xem trực tiếp có kích thước cố định lớn hơn diện tích hiển thị. Một số đặc điểm của chế độ xem được bỏ qua khi nó hoạt động như chế độ xem trực tiếp. Tuy nhiên, tôi không thể tìm thấy nơi này được đề cập trong tài liệu, mà vexes tôi. Quan trọng hơn, làm cách nào để giải quyết vấn đề này? Tôi muốn có thể bố trí các giao diện người dùng đơn giản thay đổi để phù hợp với kích thước hiện tại của chế độ xem trực tiếp. Tôi không biết làm thế nào để giải quyết vấn đề này mà không cần dùng thử lỗi & và mã hóa cứng, đó là hai điều tôi thực sự muốn tránh.

Trả lời

0
let sqv = UIView(frame: CGRect(x: UIScreen.mainScreen().bounds.width-50-1, y:400, width: 50, height: 50)) 

Mã trên sẽ đặt chế độ xem phụ của bạn cách xa bên phải của chế độ xem chính 1 điểm. Hãy thử thay đổi giá trị 1 sau 50 trong x thành giá trị mong muốn.

+1

rằng dường như không làm việc. Bạn có chắc chắn bạn đang nói về lượt xem trực tiếp trong Sân chơi? Tôi in UIScreen.main.bounds và nó là một cái gì đó giống như 1024w, 768h đó là rất lớn so với khu vực có thể nhìn thấy. – PopKernel

+0

bạn cũng có thể nhận tọa độ chế độ xem siêu và đặt chế độ xem phụ của bạn tham chiếu đến chế độ xem siêu. let sqv = UIView (frame: CGRect (x: v.frame.origin.x + 1, y: 400, width: 50, height: 50)) – phamot

4

Tôi nghi ngờ tôi biết điều gì đang xảy ra ở đây; lượt xem trực tiếp có kích thước cố định lớn hơn diện tích hiển thị.

Thực ra nó giống như cách khác. Màn hình iPad rộng 1024 điểm (theo hướng ngang). Khung bên phải (nơi hiển thị cửa sổ xem trực tiếp của bạn) rộng 512 điểm. Sân chơi buộc khung nhìn gốc của bạn (v) để lấp đầy ô đó, được chèn bằng 40 điểm ở bên trái, bên phải và trên cùng (và nhiều hơn nữa ở phía dưới). Vì vậy, chiều rộng của chế độ xem gốc của bạn bị buộc phải là 432 (= 512 - 2 * 40), nhỏ hơn 500 bạn đã chỉ định.

Chế độ xem được tạo bằng mã (như của bạn) có translatesAutoresizingMaskIntoConstraints = true và mặt nạ đổi kích thước là 0, có nghĩa là không điều chỉnh khung của khung nhìn khi cha mẹ được đổi kích thước. Vì vậy, sân chơi sẽ thay đổi kích thước gốc của bạn thành chiều rộng 432, nhưng chế độ xem gốc của bạn không di chuyển hoặc thay đổi kích thước chế độ xem con của nó (sqv).

Sửa chữa dễ nhất là đặt mặt nạ tự động của chế độ xem phụ để thể hiện ý định của bạn rằng nó vẫn ở gần cạnh bên phải và dưới cùng của chế độ xem gốc. Điều đó có nghĩa nó nên có đầu linh hoạt và lề trái:

let v = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) 
let sqv = UIView(frame: CGRect(x: 400, y: 400, width: 50, height: 50)) 
sqv.autoresizingMask = [.flexibleLeftMargin, .flexibleTopMargin] 
sqv.backgroundColor = .red 
v.addSubview(sqv) 
PlaygroundPage.current.liveView = v 

Kết quả:

enter image description here

+0

Điều gì sẽ xảy ra nếu tôi đặt translatesAutoresizingMasksIntoConstraints thành true cho mục đích bố cục tự động? – PopKernel

+0

Đã là 'true' bởi vì đó là mặc định cho chế độ xem được tạo trong mã. –

+0

Tôi biết nhưng để có được bố trí tự động để làm việc tôi thường phải đặt nó là sai. – PopKernel

Các vấn đề liên quan