1

そのため、キーボードが表示されたときにビューを押し上げたい人によく提案されるように、UIScrollView を使用します。このページから情報をコピーして貼り付けました -- http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542- CH5-SW7 -- そのためには...

しかし、テキスト フィールドをタップすると、キーボードがポップアップしますが、ビューは実際には下にスクロールし、上部に黒が表示されます。その後、実際に手動でビューを上にスクロールして、非表示のテキスト フィールドを表示することができます...明らかに、それは私がやろうとしていることではありません!

何か案は?viewDidLoad() メソッドには次のものがあります:- (void)viewDidLoad

{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];
}

このバージョンのkeyboardWasShownを試しました:

- (void) keyboardWasShown:(NSNotification *)aNotification
{
    NSDictionary * info = [aNotification userInfo];
    CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0, 0,keyboardSize.height, 0);
    [[self introScroll] setContentInset:contentInsets];
    [[self introScroll] setScrollIndicatorInsets:contentInsets];

    CGRect ltdRect=[[self view] frame];
    ltdRect.size.height=keyboardSize.height;
    if (!CGRectContainsPoint(ltdRect,[self activeField].frame.origin))
    {
        CGPoint scrollPoint = CGPointMake(0,[self activeField].frame.origin.y-keyboardSize.height);
        [[self introScroll] setContentOffset:scrollPoint animated:YES];
    }
    NSLog(@"Keyboard out!");
}

このバージョンのkeyboardWasShown:

- (void)keyboardWasShown:(NSNotification*)aNotification {

    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    CGRect bkgndRect = [[[self activeField] superview ]frame];
    bkgndRect.size.height += kbSize.height;

    [[[self activeField] superview] setFrame:bkgndRect];

    [[self introScroll] setContentOffset:CGPointMake(0.0, [self activeField].frame.origin.y-kbSize.height) animated:YES];

}

どちらもまったく同じ結果が得られます。

どうしたの??Xcode 4.6 を使用しています。

4

1 に答える 1

0

テキストフィールドがスクロールして表示されないという同様の問題がありました。
アップルのコードは完璧ではありません。修正する必要がありました。アクティブなフィールドの高さを行に追加して解決してみてください。

frame.origin.y + frame.size.height - keyboardSize.height

それでもうまくいかない場合は、scrollpoint.y (ナビゲーション バーのサイズ) に 44 を追加します。

iOS7 の更新:

iOS 7 でテキスト フィールドの不要な間違ったスクロールを改善しました。

if (scrollPtY < 0) {
        return;
}
于 2013-02-27T01:53:46.047 に答える