1

UITextFieldsetTextを呼び出した後のフレームサイズを制限する方法はありますか?他のすべての質問は、ユーザーが編集した後に文字列に基づいてサイズを調整すること、または編集中に文字列自体のサイズを制限することに関係しているようです。

UITextFieldはIBから初期化され、次にviewDidLoadでsetTextを呼び出します。にUITextFieldありUINavigationItemますUINavigationBar

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *theURL = [NSString stringWithFormat:@"http://stackoverflow.com/questions/ask/ThisIsABogusURLForExamplePurposes.htm"];
    [_addressBar setText:theURL];
}

この場合、ユーザーが文字列を編集できるようにする必要がありますが、ビューが最初に表示されるときにコードで設定されます。IBでは、幅を目的の最大幅に設定しましUITextFieldた。小さな文字列を入力すると、そのサイズのままになります。ただし、フィールドの幅を超えてテキストが表示される文字列を使用してsetTextを呼び出すと、幅が。UITextFieldの全長に拡大されUINavigationBarます。setTextが呼び出された後、プログラムでフィールドのフレームサイズを設定しようとしましたが、効果がないようです。

助けてくれてありがとう!

4

1 に答える 1

1

私も同様の問題を抱えていましたが、InterfaceBuilderを使用してそれを解決することはできませんでした。私が行ったことは、プログラムで固定サイズのアドレスバーを特定のサイズのUIViewに追加することです。このUIViewは、ナビゲーションアイテムのtitleViewとして設定されます。

これにより、テキストフィールドが左揃えになり、デバイスを回転させたときにその配置が再計算されます(そのため、viewWillLayoutSubviewsをオーバーライドしました)。


- (void)viewWillLayoutSubviews
{
    NSString *theURL = [NSString stringWithFormat:@"http://stackoverflow.com/questions/ask/thisIsABogusURLForExamplePurposes.htm"];

    UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.navigationController.navigationBar.frame.size.width, 30.0)];
    UITextField *addressBar = [[UITextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 30.0)];
    [addressBar setBorderStyle:UITextBorderStyleRoundedRect];
    [addressBar setText:theURL];

    [containerView addSubview:addressBar];
    [[self navigationItem] setTitleView:containerView];
}
于 2013-01-03T09:15:06.627 に答える