2017-01-23 3 views
0

이것은 내 첫 번째 질문이며 코딩에있어서 아주 새로운 것입니다.UIScrollView xcode 8 swift 3

나는 앱을 만들고 있는데, 페이지 중 하나는 사용자가 두 개의 라벨, 두 개의 텍스트 필드, 스위치 및 '보내기'버튼으로 작성하는 양식을 가지고 있습니다.

작은 화면 크기의 경우 일부 요소가 사라져서 스택 뷰를 사용했지만 키보드가 나타나면 사용자에게 짜증나는 텍스트 필드가 차단됩니다.

scrollviews 추가에 대한 자습서를 보았습니다.하지만 가장 작은 장치에 모든 것이 잘 맞도록 높이를 설정하면 큰 화면 하단에 불편할 정도로 큰 공백이 남습니다.

필요시에만 스크롤보기를 활성화하는 방법이 있습니까? 이것은 "역동적 인"것이 무엇입니까?

+0

"필요한 경우에만 스크롤보기를 활성화하는 방법이 있습니까?" 이것이 기본 동작입니다. 내용이보기보다 큰 경우에만 스크롤합니다. [튜토리얼] (http://www.ios-blog.co.uk/tutorials/objective-c/uitextfield-move-up-when-keyboard-present/)을 확인하십시오. – shallowThought

답변

0

이것은 텍스트 뷰를 선택하고 키보드를 활성화 할 때까지 꺼냅니다있는 ScrollView 이동의 관점에서 나를 위해 일하게 종료 것입니다.

func textViewDidBeginEditing(_ textView: UITextView) { 
    scrollView.setContentOffset(CGPoint(x: 0, y: 50), animated: true) 
} 

** 50 값은 내 레이아웃에서 효과가있었습니다. 그 숫자는 다를 수 있습니다.

나는 또한에 넣어 :

func textViewDidEndEditing(_ textView: UITextView) { 
     scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true) 
} 

...사용자가 편집을 완료하면 스크롤 뷰가 정상으로 돌아갑니다.

0

다른 크기의 화면에서 UI 서식을 지정할 때 문제가 발생하는 경우 자동 레이아웃은이 문제를 해결하는 xcode의 기본 제공 기능입니다. 보기에 제약 조건을 추가하면 autolayout이 UI 요소의 크기를 조정하여 스토리 보드에 표시되는 내용을 모든 장치에서 사용할 수 있도록 최선을 다할 것입니다. 이 기법을 사용하면 스크롤 뷰를 피할 수 있습니다. 모든보기를 선택한 다음 편집기 -> 자동 레이아웃 문제 해결 -> 제안 된 제약 조건으로 재설정으로 가서 해당 기능이 작동하는지 확인하십시오.

+0

달튼, 답해 주셔서 감사합니다. 내가 제안한 것을 시도했지만 화면 크기가 작을수록 더 많은 자산이 사라졌습니다. 위에서 아래로, 나는 간단한 레이블, 제목 라벨과 텍스트 필드가있는 스택보기, 메시지 레이블과 textVIEW가있는 스택보기, 스위치가있는 가로 스택보기 및 "익명"레이블, "보내기"버튼이있는 간단한 레이블이있는 레이블이 있습니다. 어쩌면 나는 그것들을 모두 포괄적 인 스택보기에 넣어야 할까? – ChrisK

0

두 가지 질문이있는 것으로 보입니다. 첫 번째는 "작은 화면 크기의 경우 일부 요소가 사라지는 것"입니다. 그 중 하나는 @Dalton Sweeney가 대답합니다. 키보드가 약간 UIElemnts을 포함 할 때이하기로되어있는 것을 권장 제약

내가 두 번째 질문에 대답하기 위하여려고하고있다,에 자동 레이아웃 다음 재설정을 사용합니다.

보기 컨트롤러를 변경할 필요가 없으므로 키보드가 숨겨 지거나 나타나면 동적으로보기의 프레임을 변경해야합니다. 표시

1) 키보드를 감지하는 두 개의 알림을 생성/숨기기하는 것입니다 :

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSNotificationCenter *ctr = [NSNotificationCenter defaultCenter]; 

    [ctr addObserver:self 
     selector:@selector(moveKeyboardInResponseToWillShowNotification:) 
     name:UIKeyboardWillShowNotification 
     object:nil]; 

    [ctr addObserver:self 
     selector:@selector(moveKeyboardInResponseToWillHideNotification:) 
     name:UIKeyboardWillHideNotification 
     object:nil]; 

} 
https://github.com/EricZhang90/IOS_Demo/tree/master/KeyboadDemo

주요 흐름은 다음입니다 : 나는 당신이 원하는 경우 전체 버전을 확인 GitHub의에서 데모를했다

2)보기의 프레임 조정

이 메서드는 두 매개 변수를 사용합니다. 첫 번째는 알림 센터에서 보낸 키보드 정보입니다. 첫 번째 단계에서이 방법으로 얻을 수 있습니다. 두 번째 매개 변수는이 조정이 프레임 축소 또는 확장을 나타냅니다. 키보드가 숨겨 지려 할 때 그 값은 0이고 키보드가 나타날 때 키보드의 프레임입니다.

-(void)adjustView: (NSDictionary *)info :(CGRect)rect{ 

    // get duration of keyboard appears/hides 
    CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; 
    // get keyboard's curve 
    UIViewAnimationCurve curve = [[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue]; 
    [self.view layoutSubviews]; 

    // Start to adjust frame: 
    // Animate: 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:duration]; 
    [UIView setAnimationCurve:curve]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    // self.buttonLayoutConstraint is the layout constraint between bottom of view and bottom of screen(super view). 
    // This is the most important part. 
    self.buttonLayoutConstraint.constant = rect.size.height; 
    [self.view layoutSubviews]; 
    [UIView commitAnimations]; 
} 
관련 문제