1

有没有办法UITextField在调用 setText 后限制 a 的帧大小?所有其他问题似乎都与用户编辑后根据字符串调整大小有关,或者在编辑时限制字符串本身的大小。

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

我有一个类似的问题,我无法使用界面生成器解决它。我所做的是以编程方式将具有固定大小的地址栏添加到特定大小的 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 回答