티스토리 뷰
폼의 입력란 클릭하면 키보드가 화면을 가리게 되는데
이때 스크롤뷰의 크기를 키보드 높이만큼 빼주면
스크롤뷰가 스크롤을 표시하게 되어
키보드가 올라와 있는 상태에서
다른 입력 뷰들을 볼 수 있게 하는
iOS 5 앱 만들때 기존에 썼던 코드들을 썼는데
젠장할... Scroll Indicator 나타나지 않는것이었다.
삽질의 시간 후에 알게되었지만
예전에 사용했던 xib은 스크롤 지시자가 잘 나타나서
살펴보니 AutoLayout 이 un-check 되어 있었다.
결국, Auto Layout 상에서 UIScrollView를 동작시킬 방법을 구글링 하고
삽질한 끝에 아래의 링크를 통하여 스크롤 문제를 해결했다.
http://www.g8production.com/post/57513133020/auto-layout-with-uiscrollview-how-to-use
auto layout 사용시, 뷰들은 constraint properties를 기반으로 자동적으로 크기조정 될것이다.
그러나, 자동 레이아웃 상태에서 UIScrollView 를 컨테이너와같이 사용할 경우, 기대한대로 작동하지 않을것이다.
이유는 다음의 링크에서 알아볼 수 있다 http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/index.html
“일반적으로, 자동 레이아웃은 뷰에서 가장자리가 될 the top, left, bottom, and right edges 들을 고려한다. 그것은, 만약 뷰를 superview의 왼쪽 가장자리에 고장한다 할때, 실제로는 superview의 bounds의 최소 x값에 그것을 고장하는것이다. superview의 bounds origin을 바꾸는것은 뷰의 위치를 바꾸지 않는다.
The UIScrollView class scrolls its content by changing the origin of its bounds. To make this work with Auto Layout, the top, left, bottom, and right edges within a scroll view now mean the edges of its content view.
The constraints on the subviews of the scroll view must result in a size to fill, which is then interpreted as the content size of the scroll view. (This should not be confused with the intrinsicContentSize method used for Auto Layout.) To size the scroll view’s frame with Auto Layout, constraints must either be explicit regarding the width and height of the scroll view, or the edges of the scroll view must be tied to views outside of its subtree.
Note that you can make a subview of the scroll view appear to float (not scroll) over the other scrolling content by creating constraints between the view and a view outside the scroll view’s subtree, such as the scroll view’s superview.”.
그래서, 자동레이아웃 내용과 함께 UIScrollView 최고의 설정 방법은 UIScrollView의 하위뷰로 내용 UIView를 만드는것이다.
뷰들의 트리는 아래와 같을것이다:
- MainView
- - UIScrollView
- - - content UIView
- - - - child views
음...스크롤뷰에 스크롤뷰 위치와 크기를 외부 제약으로 거는것은
thetranslatesAutoresizingMaskIntoConstraints 속성을 NO로 설정.
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // 키보드 보임/숨김 이벤트때 행동을 선택하여 알림센터에 등록 [self addKeyboardNotification]; self.keyboardVisible = NO; } - (void)dealloc { [_scrollView release]; [self removeKeyboardNotification]; [super dealloc]; } -(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.scroll.contentSize = self.theContainerViewIntoTheScroll.bounds.size; } #pragma mark - Keyboard Event - (void)addKeyboardNotification { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; } - (void)removeKeyboardNotification { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil]; } - (void)keyboardDidShow:(NSNotification *)notif { if (self.keyboardVisible) { return; } NSDictionary* info = [notif userInfo]; CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); self.scrollView.contentInset = contentInsets; self.scrollView.scrollIndicatorInsets = contentInsets; // If active text field is hidden by keyboard, scroll it so it's visible // Your application might not need or want this behavior. CGSize viewFrameSize = self.view.frame.size; viewFrameSize.height -= kbSize.height; self.scrollView.contentSize = CGSizeMake(self.contentView.bounds.size.width, viewFrameSize.height); self.keyboardVisible = YES; } - (void)keyboardDidHide:(NSNotification *)notif { UIEdgeInsets contentInsets = UIEdgeInsetsZero; self.scrollView.contentInset = contentInsets; self.scrollView.scrollIndicatorInsets = contentInsets; self.keyboardVisible = NO; } #pragma mark - Making the keyboard close - (IBAction)doneEditing:(id)sender { [sender resignFirstResponder]; }
'모바일 > iOS' 카테고리의 다른 글
property attributes (nonatomic, copy, strong, weak) (0) | 2014.02.24 |
---|---|
message sent to deallocated instance 같은 오류 Debug (0) | 2014.02.24 |
UITable Cell, UILabel, UITextView 등에서 자동 높이 (1) | 2014.02.22 |
iOS 자동 UITableView Paging & infinite loading (0) | 2014.02.17 |
UIImageView+WebCache.h: No such file or directory 오류 해결 (0) | 2013.05.28 |
- Total
- Today
- Yesterday
- Make Use Of
- How to geek
- 인터넷 통계정보 검색시스템
- 트위터 공유 정보모음
- 웹표준KR
- 치우의 컴맹탈출구
- Dev. Cheat Sheets
- w3schools
- Dev. 조각들
- ASP Ajax Library
- CSS Tricks
- WebResourcesDepot
- jQuery Selectors Tester
- DeveloperSnippets
- Smashing Magazine
- Nettuts+
- devListing
- 웹 리소스 사이트(한)
- Mobile tuts+
- Dream In Code
- Developer Tutorials
- CSS3 Previews
- 자북
- 안드로이드 사이드
- Code Visually
- Code School
- SQLer.com
- 무료 파워포인트 템플릿
- iconPot
- Free PowerPoint Templates
- Design Bombs
- Web Designer Wall
- 1st Webdesigner
- Vandelay Design
- 무료 벡터 이미지 사이트들
- Tripwire Magazine
- Web TrendSet
- WebMonkey
- 윤춘근 프리젠테이션 디자이너 블로그
- cz.cc 무료 DNS
- [웹하드] MediaFire
- [웹하드] DivShare
- 한컴 인터넷 오피스
- classic asp
- git
- JSON
- ASP
- 안드로이드
- Debug
- Docker
- API
- CSS
- mssql
- Prototype
- 워드프레스
- iis
- Chrome
- Linux
- centos
- javascript
- iphone
- sencha touch
- Mac
- nodejs
- PHP
- laravel
- JQuery
- nginx
- IE
- Android
- IOS
- Wordpress
- 한글
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |