如何设计 UI 以支持 iPhone 和 iPad 的所有屏幕
Posted
技术标签:
【中文标题】如何设计 UI 以支持 iPhone 和 iPad 的所有屏幕【英文标题】:How To Design an UI to support all the screens of iPhones and iPads 【发布时间】:2015-07-29 05:54:19 【问题描述】:我正在开展一个项目,我必须支持所有 iPhone 屏幕,例如(iPhone4、iPhone 4S、iPhone 5S、iPhone 6、iPhone 6+)和 iPad(iPad Mini、iPad Air、iPad Air 2、iPad 4等)。
我曾想过在 UI 设计中使用 AutoLayout 和 AdaptiveLayout。我学到了这一点,并尝试在我的项目中应用。我在自动布局和自适应布局的设计上或多或少是成功的,但是,当用户编辑它时,调整文本字段的大小会出现问题。
当用户尝试编辑文本字段时,我们需要将文本字段放在键盘顶部。所以,这可以在代码中完成,但是,当我们使用自动布局时,这段代码现在不起作用。 根据概念,当我们使用自动布局时,我们无法通过代码动态调整视图中控件的框架。
我现在很震惊?请帮我解决这个问题。提前致谢
【问题讨论】:
我也在使用自动布局,但使用以下代码(检查我的答案)我们可以在用户编辑文本字段时更改框架。 【参考方案1】:#pragma mark ----- Text field -----
-(void)textFieldDidBeginEditing:(UITextField *)textField
// scroll up current text field
[self animateTextField:textField up:YES withOffset:textField.frame.origin.y / 2];
-(void)textFieldDidEndEditing:(UITextField *)textField
[self animateTextField:textField up:NO withOffset:textField.frame.origin.y / 2];
-(BOOL)textFieldShouldReturn:(UITextField *)textField
[textField resignFirstResponder];
return true;
#pragma mark ---- Text field scroll Up -----
-(void)animateTextField:(UITextField*)textField up:(BOOL)up withOffset:(CGFloat)offset
const int movementDistance = -offset;
const float movementDuration = 0.4f;
int movement = (up ? movementDistance : -movementDistance);
[UIView beginAnimations: @"animateTextField" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
试试这个,对你有帮助
【讨论】:
它可以在没有自动布局的情况下工作。但是,它不适用于自动布局 Pravin 我正在使用自动布局,但它可能会起作用,您可能会错过一些东西。【参考方案2】:请参阅此链接以获取答案。即使我们使用 AutoLayout,它也会帮助我们将文本字段置于顶部。
https://github.com/michaeltyson/TPKeyboardAvoiding/blob/master/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.m
【讨论】:
以上是关于如何设计 UI 以支持 iPhone 和 iPad 的所有屏幕的主要内容,如果未能解决你的问题,请参考以下文章
支持iPhone 6和iPhone 6+,具有不同的启动/启动屏幕图像,适用于iPad纵向和横向方向