

現在、Xcode6.4でiOS8 iPhoneのアプリ開発を行っています。  
StoryboardやXibは使用せず、すべてSwift1.2コードで書いています。

ファーストビューをAutoLayoutoで以下のようにしたいです。

「navigationBar」  
「UILabel」  
「UIImageView」  
「UIImageView」  
「UIImageView」  
「UIImageView」  
「UIImageView」  
「UIImageView」  
「UIImageView」

※「UILabel」から下はScrollViewにしたい  
「UIImageView」はアスペクト比を維持したまま横幅いっぱいに表示させたい

しかし、UIImageViewにAutoLayoutを設定しようとするとエミュレータ実行時にアプリが落ちます。  
ソースはこちらです

[code]

    class AreaSelectViewController: UIViewController {
    
    var myImageView: UIImageView!
    var infoLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.title = "FirstView"
        self.view.backgroundColor = UIColor.whiteColor()
    
        self.initLabel()
        self.initImage()
        self.initAutolayout()
    
    }
    
    // ラベル生成
    func initLabel(){
        infoLabel = UILabel(frame: CGRectMake(displayWidth/2-150, 80, 300, 30))
    
        infoLabel.text = "Labelテキスト"
        infoLabel.textAlignment = NSTextAlignment.Center
        infoLabel.textColor = btBlack
        infoLabel.font = btFontS
    
        infoLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
        self.view.addSubview(infoLabel)
    }
    
    
    // 画像生成
    func initImage(){
        myImageView = UIImageView(frame: CGRectMake(0,0,300,70))
        myImageView.image = UIImage(named: "xxxxxx.png")
    
        myImageView.setTranslatesAutoresizingMaskIntoConstraints(false)
        self.view.addSubview(myImageView)
    }
    
    
    // Autolayout
    func initAutolayout(){
        //myImageView
        self.myImageView.addConstraints([
    
            NSLayoutConstraint(
                item: self.myImageView,
                attribute: NSLayoutAttribute.Top,
                relatedBy: NSLayoutRelation.Equal,
                toItem: self.view,
                attribute: NSLayoutAttribute.Baseline,
                multiplier: 1182/202,
                constant: 120
            )
        ])
    
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    }
    
[/code]

ログには  
terminating with uncaught exception of type NSException  
と出ています。


CC BY-SA 3.0
2015-08-20T01:49:10.220
14646
2015-08-20T02:33:39.767
2015-08-20T01:55:10.467
10996
10996
question
ios swift iphone xcode6 ios8
Swift1.2 Xcode6.4 iOS8 コードでAutoLayoutしようとするとSIGABRTエラー


落ちることに関して言えば、

[code]

    self.myImageView.addConstraints([
    
[/code]

を

[code]

    self.view.addConstraints([
    
[/code]

にすれば落ちなくなります。

余計なお世話ですが、Constraintをあまり理解されていないようですので、一度Storyboard上でConstraintを作成してからコードに落とした方が良いんじゃないでしょうか？


CC BY-SA 3.0
2015-08-20T02:33:39.767
14647
2015-08-20T02:33:39.767
10966
14646
answer