본문 바로가기

iOS

[iOS] 코드로 오토레이아웃 조절하기

iOS 6.0 부터 오토레이아웃이 적용되었다.

잘만 조정하면 코드한줄도 없이 다양한 상황에 대응되는 레아웃을 만들 수 있다.

하지만 언제나 원하는 대로는 되지 않는 법이고, 종종 코드로 오토레이아웃을 조절해 줘야하는 상황이 생긴다.

오토레이아웃을 코드로 조절하면 사실 코드가 굉장히 길어지고 헛갈리기 마련인데...

그것을 매우 쉽게 할 수 있는 오픈소스 라이브러리가 존재한다.


바로 Keep Layout 이다.

이 라이브러리는 다음의 깃 허브에서 받을 수 있다

KeepLayout


사용은 굉장히 간단한데 위 깃허브에서 source 폴더에 있는 파일을 모두 프로젝트에 포함시킨다.


xxxx.h 

#import <UIKit/UIKit.h>

#import "KeepLayout.h"/KeepLayout 사용을 위해 헤더에 포함


@interface xxxxController : UIViewController

@property (strong, nonatomic) IBOutlet UIView *superview_home;

@property (weak, nonatomic) IBOutlet UIButton *button_m1;

@property (weak, nonatomic) IBOutlet UIButton *button_m2;

@property (weak, nonatomic) IBOutlet UIButton *button_m3;

@property (weak, nonatomic) IBOutlet UIButton *button_m4;


@end


그리고 대략 위와 같이 오토레이아웃 적용을 받는 버튼 4개가 있다고 하자.

여기서 상황에 따라 각각의 버튼별로 Top Space를 변경하는 코드를 작성하고자 한다면

다음과 같이 사용할 수 있다.


xxxx.m

..... 이상 생략 ....

KeepAttribute *m1 = _button_m1.keepTopInset;

KeepAttribute *m2 = _button_m2.keepTopInset;

KeepAttribute *m3 = _button_m3.keepTopInset;

KeepAttribute *m4 = _button_m4.keepTopInset;

        

m1.equal = KeepRequired(90.0); //속한 뷰의 상단에서부터 90pt 간격을 가진다.

m2.equal = KeepRequired(150.0); //속한 뷰의 상단에서부터 150pt 간격을 가진다.

m3.equal = KeepRequired(200.0); //속한 뷰의 상단에서부터 200pt 간격을 가진다.

m4.equal = KeepRequired(300.0); //속한 뷰의 상단에서부터 300pt 간격을 가진다.

..... 이하 생략 .....


* iOS 6.0 부터 허용되는 형태의 코드로 작성되었습니다.

변경하고자 하는 오토레이아웃의 속성을 지정하여 KeepAttribute 라는 객체를 생성한다.

위의 코드에서는 최상단으로부터 떨어진 공간을 조정하기 위해 KeepTopInset메서드를 사용하였다.

넓이나 다른 속성 역시 위와같은형태로 사용하면 된다.

이렇게  KeepAttribute 객체를 생성후 해당 객체에 값을 넣어주면된다.

KeepRequired 등은 오토레이아웃 에서 Priority 값을 가지고 있는 메서드다 Required는 1000에 해당되고 그보다 낮은 high low 등도 존재한다.


이외 더욱 자세한 사항은 깃허브 페이지를 참조하면 된다.