Я написал небольшую категорию в UIView, которая управляет временной прокруткой без необходимости оборачивать все это в UIScrollView. Мое использование глагола «прокрутка» здесь, возможно, не идеально, потому что это может заставить вас думать, что используется представление прокрутки, а это не так - мы просто анимируем положение UIView (или подкласса UIView).
В него встроено несколько магических чисел, соответствующих моей форме и макету, которые могут не соответствовать вашей, поэтому я рекомендую настроить это в соответствии с вашими конкретными потребностями.
UIView + FormScroll.h:
#import <Foundation/Foundation.h>
@interface UIView (FormScroll)
-(void)scrollToY:(float)y;
-(void)scrollToView:(UIView *)view;
-(void)scrollElement:(UIView *)view toPoint:(float)y;
@end
UIView + FormScroll.m:
#import "UIView+FormScroll.h"
@implementation UIView (FormScroll)
-(void)scrollToY:(float)y
{
[UIView beginAnimations:@"registerScroll" context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.4];
self.transform = CGAffineTransformMakeTranslation(0, y);
[UIView commitAnimations];
}
-(void)scrollToView:(UIView *)view
{
CGRect theFrame = view.frame;
float y = theFrame.origin.y - 15;
y -= (y/1.7);
[self scrollToY:-y];
}
-(void)scrollElement:(UIView *)view toPoint:(float)y
{
CGRect theFrame = view.frame;
float orig_y = theFrame.origin.y;
float diff = y - orig_y;
if (diff < 0) {
[self scrollToY:diff];
}
else {
[self scrollToY:0];
}
}
@end
Импортируйте это в свой UIViewController, и тогда вы можете сделать
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[self.view scrollToView:textField];
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{
[self.view scrollToY:0];
[textField resignFirstResponder];
}
... или что угодно. Эта категория дает вам три довольно хороших способа отрегулировать положение вида.