2017-02-02 1 views
0

Xcode SwiftプレイグラウンドでUIViewControllerサブクラスを使用しています。コントローラのビューは、明らかに倍精度として報告されています。間違ってやっているのですか、バグに遭遇しましたか?ViewController in Xcodeプレイグラウンド - フレームのサイズが2倍になった(viewDidLoad)

ビューの半分の幅の黄色のサブビューを配置すると、幅全体をカバーします。

Xcodeのバージョン8.2.1(8C1002)

import UIKit 
import PlaygroundSupport 


class ViewController : UIViewController { 
    override func viewDidLoad() { 
    title = "Double Frame" 
    super.viewDidLoad() 
    view.frame // inspecting the frame size: 768 x 1024 

    let halfV = UIView(frame: CGRect(x: 0, y: 200, 
            width: Int(view.frame.width/2), 
            height: Int(view.frame.width/2))) 
    halfV.backgroundColor = UIColor.yellow 
    view.addSubview(halfV) 

    } 
} 
PlaygroundPage.current.liveView = UINavigationController(rootViewController: ViewController()) 

enter image description here

+2

'viewDidLoad'が呼び出された後、あなたのビューコントローラのビューのサイズがいつか変更されています。制約を持つ黄色のサイズを変更する必要があります/マスクの自動サイズを変更する/スーパービューのサイズ変更時にサイズを変更するその他の方法。 – dan

答えて

1

あなたは、コントローラのビューは、自動レイアウトを使用してサイズにされようとしているビュー。自動レイアウトパスはviewDidLoadの後に発生します。ビューコントローラのビューのframeを参照してサブビューのプログラムサイズを変更する場合は、そのコードをviewDidLayoutSubviewsに移動する必要があります。例:

class ViewController : UIViewController { 
    let halfV = UIView() 

    override func viewDidLoad() { 
     title = "Double Frame" 
     super.viewDidLoad() 
     view.frame // inspecting the frame size: 768 x 1024 


     halfV.backgroundColor = UIColor.yellow 
     view.addSubview(halfV) 
    } 

    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 
     halfV.frame = CGRect(x: 0, y: 200, 
       width: CGFloat(view.frame.width/2), 
       height: CGFloat(view.frame.width/2)) 
    } 
} 
PlaygroundPage.current.liveView = UINavigationController(rootViewController: ViewController()) 
関連する問題