2017-01-23 97 views
0

这是我的第一个问题,我是全新的编码。UIScrollView xcode 8 swift 3

我正在创建一个应用程序,其中一个页面有一个用户填写两个标签,两个文本框,一个开关和一个“发送”按钮的窗体。

对于较小的屏幕尺寸,一些元素正在消失,所以我使用了堆栈视图,但是当键盘出现时,它会阻止文本字段,这会让用户恼火,我敢肯定。

我已经看过一些关于添加滚动视图的教程,但是设置高度以便一切适合最小的设备在较大的屏幕底部留下不舒服的大空白区域。

有没有办法只在需要时启用滚动视图?这是“动态”的目的吗?

+0

“是否有方法只在需要时启用滚动视图?”这是默认行为。只有当其内容大于其视图时才滚动。看看[教程](http://www.ios-blog.co.uk/tutorials/objective-c/uitextfield-move-up-when-keyboard-present/)。 – shallowThought

回答

0

这是结束了在移动了滚动起来,闪开方面工作对我来说,当TextView的选择和激活键盘。

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中的一项内置功能,可解决此问题。通过为视图添加约束条件,自动布局将尽最大努力调整UI元素的大小,以便在故事板中看到的是您在所有设备上获得的内容。使用这种技术,你可以完全避免使用scrollview。尝试选择所有视图,然后转到编辑器 - >解决自动布局问题 - >重置为建议的约束,并查看是否有效。

+0

Dalton,谢谢你的回答。我尝试了你的建议,但屏幕越小,资产消失越多。从上到下,我有:带简要说明的标签,带主题标签和文本框的堆栈视图,带有消息标签和textVIEW的堆栈视图,带开关和“制作匿名”标签的水平堆栈视图,“发送”按钮。也许我应该把它们放在一个全方位的堆栈视图中? – ChrisK

0

似乎你有两个问题。首先是“对于较小的屏幕尺寸,一些元素正在消失”。那个由@Dalton Sweeney回答。使用自动布局然后重置建议约束

我要回答你的第二个问题,你应该做的事情时,键盘盖一些UIElemnts。

您不需要更改视图控制器,您应该在键盘隐藏/显示时动态更改视图的框架。我做在GitHub上演示,查看完整版,如果你想:https://github.com/EricZhang90/IOS_Demo/tree/master/KeyboadDemo

主要工作流程如下:

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]; 

} 

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]; 
}