iOSメモ - Auto Layout勘所

# Auto Layout勘所

### 1.まず基礎を学ぶ

参考: [mixi-inc/AutoLayout入門](https://github.com/mixi-inc/iOSTraining/wiki/Auto-Layout%E5%85%A5%E9%96%80)

参考：[iOS 7 Xcode 5 で始める Auto Layout 入門 #1 – 基礎知識編](http://dev.classmethod.jp/references/ios-7-xcode-5-auto-layout-1/)

### 2.viewのcontentSizeは、*viewDidLayoutSubviews*で決まる

参考：[UIScrollviewをStoryboardで設定する場合](http://labs.septeni.co.jp/?p=910)

### やっぱり標準Document

参考：[Auto Layout ガイド](https://developer.apple.com/jp/devcenter/ios/library/documentation/AutolayoutPG.pdf)

1. 赤色が駄目制約とかを学ぶ、点線が優先度低い制約
1. ScrollViewに気をつけろ
1. Debugの仕方について学ぶ



### Top Layout Guide,Bottom Layout Guideに注意する。
ナビゲーションバーの高さは、iOS6で44px, iOS7で64px

### 4inch,3.5inchの対応について - 最大値と最小値を使う

参考：[iOSアプリを作ってみる (8) - Autolayoutに振り回される その1](http://deutschina.hatenablog.com/entry/2013/09/16/164838)

　　　[Autolayout に対応した画面で UIScrollView を使う時のコツ](http://d.hatena.ne.jp/glass-_-onion/20131008/1381240961)

Debug用

		-(void)viewDidLayoutSubviews{
           NSLog(@"%@",NSStringFromCGRect(self.scrollView.frame));
	       NSLog(@"%@",NSStringFromCGRect(self.webView.frame));
           [super viewDidLayoutSubviews];
		}



## 合わして読みたい

[実践 Auto Layout](http://blog.jarinosuke.com/entry/auto-layout-best-practice)

## Adjust Scroll View InsetsとUnder Top Bar／Under Bottom Bar

[やはりお前らのiOS7対応は間違っている(解説編)](http://qiita.com/yimajo/items/254c7cebab7864678246)
## 追記【高さの座標まとめ】

 | iphone4s | iphone5/5s | iphone6 | iphone6 Plus
------------ | ------------- | ------------ | ------------ | ------------ 
論理上のピクセル | 320 x 480  | 320 x 568 | 375 x 667 | 414 x 736 
NavigationBar(64) | 416  | 504 | 603 | 672 
Tab Bar Item(49) | 431  | 519 | 618 | 687 
NBar and TBar(113) | 367  | 455 | 554 | 623 

図を書いた方がいいな...orz

## 追記1

### self.automaticallyAdjustsScrollViewInsets = NO;//コレ何やねん1

> Default value is YES, which allows the view controller to adjust its scroll view insets in response ***to the screen areas consumed by the status bar, navigation bar, and toolbar or tab bar.*** Set to NO if you want to manage scroll view inset adjustments yourself, such as when there is more than one scroll view in the view hierarchy.

#####  →NavigationVCをラップしたVCの中の、ScrollViewがちゃんと動かん時??配置されない時にこいつをNOにしよう

##### →Insetsとは余白のこと


### self.scrollView.translatesAutoresizingMaskIntoConstraints=YES,NO//コレ何やねん2

##### UIViewのpropertyから抜粋

> UIView
 @property(nonatomic) UIViewAutoresizing autoresizingMask
 Description
 An integer bit mask that determines how the receiver resizes itself when its 
 superview’s bounds change
Maskってなんですかね

##### [UIViewのランドスケープの為のプロパティ！autoresizingMask　にだまされた！](http://ameblo.jp/cocoric/entry-10894970679.html)

>  右下に固定させるためには、
     label.autoresizingMask = UIViewAutoresizingFlexibleTopMargin |  UIViewAutoresizingFlexibleLeftMargin;
これで、上と左の幅だけをリサイズ。つまり右と下の幅は固定。

##### →superViewの変化を吸収して、Resizeしてくれる

##### →例えば,xibでYESにすると、_可変なView_が出来ます。

> [Autolayout に対応した画面で UIScrollView を使う時のコツ](http://d.hatena.ne.jp/glass-_-onion/20131008/1381240961)

* AutoLayout だけで作るか AutoResizingMask を組み合わせるか

----

### 追記2 UIScrollViewはAutoLayoutを使用する際

- contentSizeをコードで代入する

```objc
self.scrollView.contentSize = self.subViewIntoScrollView.bounds.size;
```

- [Sizeを制約で指定する](http://d.hatena.ne.jp/shu223/20141030/1414623275)

### 追記3 同じ幅のオブジェクトを等間隔に設置したい

spaceViewを設置するのはしっくり来なかった。
→`aspect ratio`と`height`や`width`の制約をつける

### 追記4-1 UILabelについて, prefferdWidthってなにそれ

`numberOfLines`プロパティにて、2行以上の文字を入れたい時に**好ましい幅**を設定しとかないと文字数増える潰れて`HelloWor...`等になり、辛いよねって話

[UILabel を text の長さによって複数行にする](http://blog.jarinosuke.com/entry/auto-layout-best-practice)

### 追記4-2 UILabelについて、AutoShrinkってなにそれ

UILabelのFrameによってFontをResizeしたいではなかろうか。

![スクリーンショット 2015-05-26 3.26.31.png](https://qiita-image-store.s3.amazonaws.com/0/14262/b09fc468-287a-223a-2752-2cc6e7dc6376.png)

* [Automatically adjusting UILabel fontsize](Automatically adjusting UILabel fontsize): 最小Sizeを指定し、Frameが大きくなった時一緒にFontも大きくなってくれる。
    * Tighten Letter Spancing...?[「UIKitを使いこなそう（iOS7編）」 ーiOSアプリの正しいユーザインターフェイス構築のためにー(2)](http://engineer-intern.jp/archives/12683)

> 目一杯縮小してもはみ出てしまう場合は、「Line Breaks」の指定にしたがって表示されます。なお、この「Autoshrink」欄にある「Tighten Letter Spacing」項目はオフにしておきましょう。縮小時に文字間隔を詰める設定ですが、関連するメソッドがiOS7で非推奨になっているので、触れないほうが良さそうです。なぜXcode5のStoryboardに残っているのかは不明です。

* 他にも細かい点

    * `adjustsFontSizeToFitWidth`: こいつは`numberOfLines`が1行の時しか動きません
         * コードでFontSize指定してたら出来ないので注意


### 追記5 AutoLayoutDebugの秘奥義 View Hierarchy Debug
![HierarchyDemo.gif](https://qiita-image-store.s3.amazonaws.com/0/14262/8e8158a5-0b99-031b-b4b3-4be8c7f4f8cb.gif)