

ipadではこのレイアウトを変更しよう
とsizeClassを縦横Regularに指定した項目があるのですが、エミュレーター・実機共に反応してくれず、何故かany
anyの設定が反映されてしまいます  
iOS8.1のシミュレーター、iOS8.4の実機では正常にRegular Regularの設定が反映される事を確認しました。

xcodeのプロジェクトはこちらとなります  
<http://fushi.x0.com/php_system/20160117-stackoverflow-question/xibTest2.zip>

xibで定義した二つのビュー(AaView と BView)があり  
AaViewはViewController上から

[code]

    class AaViewController : UIViewController{
        var childView : AaView?
        var bView : BView?
        override func loadView() {
            self.edgesForExtendedLayout = UIRectEdge.None;
            if let view = UINib(nibName: "AaView", bundle: nil).instantiateWithOwner(self, options: nil).first as? AaView{
                self.view = view;
            }
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            self.childView = self.view as! AaView!
            self.bView =  BView(frame: (UIApplication.sharedApplication().keyWindow?.bounds)!)
            UIApplication.sharedApplication().keyWindow?.addSubview(self.bView! )
        }
    }
    
[/code]

の様に、定義し

BViewは

[code]

    class BView: UIView {
    @IBOutlet var contentView: UIView!
    override init(frame: CGRect) { // for using CustomView in code
        super.init(frame: frame)
        self.commonInit()
    }
    required init?(coder aDecoder: NSCoder) { // for using CustomView in IB
        super.init(coder: aDecoder)
        self.commonInit()
    }
    private func commonInit(  ) {
        NSBundle.mainBundle().loadNibNamed("BView", owner: self, options: nil)
        contentView.frame = self.bounds
        self.addSubview(contentView)
    }
    
[/code]

}

の様に定義しました。

sizeClassがおかしい以外はAもBも表示されており、iphone 6Plus iOS 9.2では正常にanyのラベルのみ表示されます。(左上にB-
any、右下にA-any)  
[![左上と右下にanyのラベルがある](https://i.stack.imgur.com/eDwZ0.png)](https://i.stack.imgur.com/eDwZ0.png)

ところが、ipad2 iOS9.0/ipad air2 iOS 9.2ではA-Regularは狙い通り表示されるのですが、BについてはB-
anyが表示されてしまいます。レイアウトの指定方法をミスって位置がズレてしまっていますが・・。  
[![画像の説明をここに入力](https://i.stack.imgur.com/Ae8bX.png)](https://i.stack.imgur.com/Ae8bX.png)

これらのラベルはxCode上では  
[![画像の説明をここに入力](https://i.stack.imgur.com/7dZym.png)](https://i.stack.imgur.com/7dZym.png)  
[![画像の説明をここに入力](https://i.stack.imgur.com/w85IL.png)](https://i.stack.imgur.com/w85IL.png)  
の様に定義されており、reg regは縦横共にRegularの時のみ表示  
anyは縦横共にanyの時 ただしRegularの時は除く という指定です。

AaView、BView共に同じ指定方法です。

AaViewに関しては望み通りの表示がされているのですが、BViewについて何故かSizeClassが反映されません。  
パラメーター、設定不足等ありましたら教えて頂けますでしょうか

xcodeのバージョンは7.2となります

よろしくお願いします。


CC BY-SA 3.0
2016-01-17T08:44:09.170
20997
2016-01-19T00:09:51.730
2016-01-18T08:14:16.310
805
805
question
ios swift xcode iphone
iOS9～ のiPadでsizeClassをRegularに設定したのに反映されない


BViewにSizeClassが反映されない原因ですが、AaViewControllerのviewDidLoad()において、以下のコードでbViewをUIWindowの直下に追加しているのが原因と思われます。

[code]

    UIApplication.sharedApplication().keyWindow?.addSubview(self.bView!)
    
[/code]

該当箇所を普通にviewに追加するように書き換えれば、正常に動作するようになるかと思われます。

[code]

    view.addSubview(bView!)
    
[/code]

『なぜ、UIWindowの直下にViewを追加するとSizeClassが正常に動作しなくなるか？』ですが、この場合、traitCollectionDidChangeが呼び出されなくなるところまではわかりましたが・・・
詳細な理由は不明です。


CC BY-SA 3.0
2016-01-18T12:39:48.560
21038
2016-01-19T00:09:51.730
2016-01-19T00:09:51.730
7459
7459
20997
answer