私はこれとまったく同じ問題を抱えていました。小さなコンテナ ビューに UITableView があり、tableView で UITextField を選択すると、望ましくない位置に自動スクロールされました。これは UITableView のデフォルトの動作であり、これをオフにする方法はないようです。
代わりに、この subView コントローラーを UITableViewController ではなく UIViewController のサブクラスに変更しました。つまり、tableView を制御する TransportViewController.h の場合:
@interface TransportViewController : UITableViewController <UITextFieldDelegate>
なりました:
@interface TransportViewController : UIViewController <UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate>
代わりにクラスを UIViewController クラスとして設定すると、テーブル セルの自動スクロールは発生しません。
UITableViewController をサブクラス化していないので、適切なテーブル ビューを指すように「tableView」プロパティを手動で設定する必要があります。これを IB に接続すると、次のようになります。
@property (strong, nonatomic) IBOutlet UITableView *tableView;
最後に、この新しく割り当てられた tableView プロパティをテーブルのデリゲートおよびデータ ソースに設定する必要もあります。次のように「viewDidLoad」メソッドでこれを行うことができます。
- (void)viewDidLoad
{
[super viewDidLoad];
_tableView.dataSource = self;
_tableView.delegate = self;
}
これにより、UITextField が選択されたときに UITableViewController に固有の自動スクロールが停止します。その後、必要な UITableViewDataSource メソッドを実装し、独自の自動スクロール メソッドを処理するのはあなた次第です。