我一直在尝试调整UITextField的大小,使其适应并延伸到整个UINavigationBar上,但一直没有成功。我知道这是世界上最简单的问题之一,但我还是无知。
这并不是世界上最简单的问题,事实上它相当棘手。
你不能使用约束来解决这个问题。UINavigationBar
负责布置其子视图。Xcode知道这一点,所以它不允许你在文本字段上设置约束。
导航栏通过向文本字段发送sizeThatFits:
来询问其想要的大小,并提供允许的最大大小,因此一种方法是创建UITextField
的子类,返回最大允许大小。这样是可行的:
@implementation MyTextField
- (CGSize)sizeThatFits:(CGSize)size {
return size;
}
@end
@interface ViewController ()
@property (strong, nonatomic) IBOutlet UITextField *textField;
@end
@implementation ViewController
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
[self widenTextField];
}
- (void)widenTextField {
CGRect frame = self.textField.frame;
frame.size.width = 10000;
self.textField.frame = frame;
}
@end
Swift 4 版本
class ViewController: UIViewController {
@IBOutlet var textField: UITextField!
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
widenTextField()
}
func widenTextField() {
var frame: CGRect? = textField?.frame
frame?.size.width = 10000
textField?.frame = frame!
}
}