そのため、iOS 7 では、iOS 6 ではほとんど問題なく動作していた問題が少し発生しています (これはよく言われていることですが、これは奇妙です)。とにかく、ストーリーボードアプリがあり、TableView にはいくつかのプロトタイプセルがあり、1 つのセクションにはいくつかのラベルがあり、次に応答を入力するための TextView があります。iOS6 では、ユーザーが TextView をクリックすると、TextView がキーボードの上に表示されるようにテーブルがスクロールされますが、iOS 6 では (画面が小さいため 4s iphone でのみ) キーボードがスライドします。上に移動すると、TableView は十分にスライドするだけなので、TableViewCell 全体がまだ表示されているため、TextView はキーボードの後ろの半分になります。TextView がキーボードによってブロックされているため、1 行のテキストを入力した後、ユーザーは他に何を入力しているのかわからないため、これは面倒です。TableView はセルとヘッダーを表示するのに十分なだけスクロールするため、セクションの最初のセルではさらに悪化します。コードを見ることが役立つかどうかはわかりませんが、以下に投稿します(また、デフォルトでは、セルはラベルを表示するのに十分な高さであり、ユーザーがセルをクリックすると、そのセルの高さが拡張されますラベルの下に TextView と Buttons を表示します)
if ([indexPath section] == 1) {
if ([btrArray count] > 0) {
BTRCustomCell *btrCell = [tableView dequeueReusableCellWithIdentifier:@"BTRCell"];
//Check if BTR Row has been selected to expand View
if (row == btrSelectedRow) {
CGRect extended = btrCell.reasonLbl.frame;
extended.size.height = 70;
btrCell.reasonLbl.frame = extended;
btrCell.responseTV.hidden = NO;
btrCell.ackButton.hidden = NO;
btrCell.replyButton.hidden = NO;
}
else {
CGRect normal = btrCell.reasonLbl.frame;
normal.size.height = 30;
btrCell.reasonLbl.frame = normal;
btrCell.responseTV.hidden = YES;
btrCell.ackButton.hidden = YES;
btrCell.replyButton.hidden = YES;
}
//leaving out the lines that just add text to labels
btrCell.responseTV.textColor = [UIColor lightGrayColor];
[[btrCell.responseTV layer] setBorderColor:[[UIColor lightGrayColor] CGColor]];
[[btrCell.responseTV layer] setBorderWidth:2.3];
[[btrCell.responseTV layer] setCornerRadius:15];
btrCell.responseTV.tag = kBTRTextView + row;
btrCell.responseTV.delegate = self;
//Add Keybar to TextView
UIToolbar *keyBar = [[UIToolbar alloc] init];
[keyBar setTintColor:MobileThemeColor];
[keyBar sizeToFit];
UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard:)];
doneButton.tag = kBTRDoneButton + row;
NSArray *itemArray = [NSArray arrayWithObjects:flexButton, doneButton, nil];
[keyBar setItems:itemArray];
[btrCell.responseTV setInputAccessoryView:keyBar];
//Add Targets To Buttons
[btrCell.ackButton addTarget:self action:@selector(AcknowledgeButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
btrCell.ackButton.tag = kBTRAckButton + row;
[btrCell.replyButton addTarget:self action:@selector(ReplyButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
btrCell.replyButton.tag = kBTRReplyButton + row;
return btrCell;
これを修正する方法や、何が原因なのかよくわかりません。元のアプリは iOS3 用にビルドされ、iOS6 をサポートするためにマイナーな更新が行われたため、アプリをかなり書き直しています。このコードは、以前のバージョンからこのバージョンにコピーされましたが、iOS7 より前のバージョンではほとんど問題なく動作していました。TextView を表示するために TableView を完全にスクロールしていない iOS7 の新しい動作の一部なのか、それともセットアップで間違ったことをしたのかはわかりません。