テーブルビューとその下にいくつかのコントロール (テキスト フィールド、ボタン、ラベル) があります。
キーボードが表示されたら、親ビューの高さを下げるか、上にスライドしてコントロールにアクセスできるようにします。
その部分はうまく機能します。
ただし、テーブルビューも調整したいので、高さを下げるか (親ビューの高さを下げる場合)、origin.y 座標を下に移動します (親ビューを上にスライドする場合)。
どちらも機能しませんでした。つまり、tableView は新しいフレームに変更されず、同じままです。親ビューを操作しない場合、つまり tableView フレームだけを調整した場合にのみ、Tableview のサイズが変更されます。
そのための方法は次のとおりです。
-(void)resizeTbl:(int)pnts{
CGRect tblframe = self.myTable.frame;
//tblframe.origin.y+=pnts;
tblframe.size.height-=pnts;
self.myTable.frame =tblframe;}
-(void )keyboardWillShow:(NSNotification *)notif{
int pnts=160;
CGRect frame = self.view.frame;
//frame.origin.y-=pnts;
frame.size.height-=pnts;
self.view.frame = frame;
[self resizeTbl:pnts];}
すべてのコントロールを 1 つずつ上に移動すると、テーブルのサイズ変更が機能する可能性がありますが、もっと簡単な方法があるはずです。アドバイスをいただければ幸いです。
更新/回避策: テーブルのサイズ変更は単独で問題なく機能するため、もう 1 つオブザーバー (keyboardDidShow) を追加し、resize myTable を keyboardWilShow からそこに移動して、キーボードの起動後にテーブルビューを処理しました。
-(void)keyboardDidShow:(NSNotification *)notif{
[self resizeTbl:160];}
したがって、すべてのビューは、現在想定されているとおりに表示されます。
ただし、キーボードが既に表示されている状態で、あるテキストボックスから別のテキストボックスにフォーカスが移動すると、tableView は元のフレームに自動的にサイズ変更され、それがいつどのように行われるかをキャッチできません。そして、キーボードが下がると、tableView は元のフレームを超えて拡大します。
-(void)keyboardDidHide:(NSNotification *)notif{
[self resizeTbl:-160];}
ただし、フォーカスが再び変わると、tableView は通常のフレームに戻り、すべてが正常に表示されます。どうにかしてテーブルビューの不要なサイズ変更を防ぐことができれば、物事が台無しになります。
誰かがこのすべてを理解できるなら、私は非常に感謝しています.
アップデート:
わかった。自動レイアウトが私を台無しにしていました。そのようにオフにすると、ロジックが機能するようになり、グリッチはなくなりました。