0

テーブルビューとその下にいくつかのコントロール (テキスト フィールド、ボタン、ラベル) があります。

キーボードが表示されたら、親ビューの高さを下げるか、上にスライドしてコントロールにアクセスできるようにします。

その部分はうまく機能します。

ただし、テーブルビューも調整したいので、高さを下げるか (親ビューの高さを下げる場合)、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 は通常のフレームに戻り、すべてが正常に表示されます。どうにかしてテーブルビューの不要なサイズ変更を防ぐことができれば、物事が台無しになります。

誰かがこのすべてを理解できるなら、私は非常に感謝しています.

アップデート:

わかった。自動レイアウトが私を台無しにしていました。そのようにオフにすると、ロジックが機能するようになり、グリッチはなくなりました。

4

2 に答える 2

1

ビューの autoResizingMask は何に設定されていますか?

テーブルビューを初期化するときにこれを試してください。

self.myTable.autoresizingMask = UIViewAutoresizingFlexibleHeight;

これにより、テーブル ビューがその親ビューでサイズ変更されます。

于 2013-05-17T18:08:26.677 に答える