28339


以下のコードのようにUIScrollView上にボタンを配置しています。  
scrollViewのtopAnchorをstatusBar(20px)とnavigationBar(44px)に被らないようにconstant:
64と設定しています。次にNameButtonのtopAnchorをscrollViewのtopAnchorと同じ位置に来るように設定したつもりなのですが、画像のように空白が空いてしまいます。この空白はprintで出力した結果64px空いているようです。scrollViewのNSLayoutAnchorの設定の仕方や考え方が間違っているのか、原因がわかりません。解決方法や原因を教えていただけると助かります。

[code]

        var scrollView: UIScrollView = {
            let sv = UIScrollView()
            sv.translatesAutoresizingMaskIntoConstraints = false
            sv.backgroundColor = UIColor.brownColor()
            return sv
        }()
        var nameButton: UIButton = {
            let button = UIButton(type: .System)
            button.backgroundColor = UIColor(red: 120/255, green: 220/255, blue: 250/255, alpha: 1)
            button.setTitle("Name", forState: .Normal)
            button.translatesAutoresizingMaskIntoConstraints = false
            button.setTitleColor(UIColor.whiteColor(), forState: .Normal)
            return button
        }()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            view.backgroundColor = UIColor.whiteColor()
            let image = UIImage(named: "back")
            navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style: .Plain, target: self, action: #selector(handleBack))
    
            view.addSubview(scrollView)
            setupScrollView()
        }
        func setupScrollView(){
    
            scrollView.widthAnchor.constraintEqualToAnchor(view.widthAnchor).active = true
            scrollView.heightAnchor.constraintEqualToAnchor(view.heightAnchor).active = true
            scrollView.topAnchor.constraintEqualToAnchor(view.topAnchor,constant: 64).active = true
            scrollView.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor).active = true
            scrollView.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor).active = true
    
    
            scrollView.addSubview(nameButton)
            nameButton.leadingAnchor.constraintEqualToAnchor(scrollView.leadingAnchor,constant: 20).active = true
            nameButton.topAnchor.constraintEqualToAnchor(scrollView.topAnchor).active = true
            nameButton.widthAnchor.constraintEqualToAnchor(scrollView.widthAnchor, multiplier: 1/4).active = true
            nameButton.heightAnchor.constraintEqualToConstant(36).active = true
        }
    
[/code]

実行した結果を画像で貼っておきます。  
[![実行結果](https://i.stack.imgur.com/rS1Mp.png)](https://i.stack.imgur.com/rS1Mp.png)

本当はこのような結果になって欲しいです。  
[![理想の実行結果](https://i.stack.imgur.com/LHLvt.png)](https://i.stack.imgur.com/LHLvt.png)

Storyboardは使っていないため、Storyboardを利用しない解決法など教えていただけると助かります。


CC BY-SA 3.0
2016-08-17T13:46:16.077
28338
2016-08-17T14:46:48.403
18492
question
swift
NSLayoutAnchorが上手くいかない


`UINavigationController` から表示していると想定しますが、この `UIScrollView` には 64pt の
`contentInset` （余白）が自動的に付与されます。

`UIViewController` の `automaticallyAdjustsScrollViewInsets` プロパティを `false`
にすればこの挙動はなくなります。


CC BY-SA 3.0
2016-08-17T14:23:56.853
28339
2016-08-17T14:46:48.403
2016-08-17T14:46:48.403
5337
5337
28338
answer