Erhöhen Sie UITextField in bestimmte Länge
-
08-07-2019 - |
Frage
Ich habe eine UITextField, die Ich mag würde „automatisch“ seine Grenzen Größe anpassen, um Platz für die Zeichenkette in dem Feld hinzugefügt zu werden. Allerdings würde ich es auf max-out in der Breite bei einer bestimmten Menge gefallen. Was ist die beste Art und Weise, dass ich über das tun dies gehen kann?
Vielen Dank für jede Hilfe.
EDIT:
TestingView.h
#import <UIKit/UIKit.h>
@interface TestingView : UIView <UITextFieldDelegate> {
}
@end
TestingView.m
#import "TestingView.h"
@implementation TestingView
- (void)awakeFromNib
{
CGRect testingBounds = self.bounds;
testingBounds.size.width = testingBounds.size.width - 20;
testingBounds.size.height = 30;
CGPoint testingCenter = self.center;
testingCenter.y = testingCenter.y - 75;
UITextField *testingField = [[UITextField alloc] initWithFrame:testingBounds];
testingField.center = testingCenter;
testingField.delegate = self;
testingField.placeholder = @"Testing";
[self addSubview:testingField];
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
int yourMaxWidth = 150;
float width = [textField.text sizeWithFont:
[UIFont systemFontOfSize: 14]
constrainedToSize:
CGSizeMake(yourMaxWidth, textField.bounds.size.height)].width;
textField.bounds = CGRectMake(textField.bounds.origin.x,
textField.bounds.origin.y,
width,
textField.bounds.size.height);
return YES;
}
@end
Lösung
In der Delegatmethode textfield: shouldChangeCharactersInRange: replacementString: Sie UITextField
die Textgröße durch die Verwendung messen sollte sizeWithFont: constrainedToSize: und nutzen die Rückkehr CGSize
Breite Parameter Ihre UITextField
der Grenzen Breite eingestellt werden.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
float width = [yourTextField.text sizeWithFont:
[UIFont systemFontOfSize: 14]
constrainedToSize:
CGSizeMake(yourMaxWidth, yourTextField.bounds.size.height)].width;
yourTextField.bounds = CGRectMake(yourTextField.bounds.origin.x,
yourTextField.bounds.origin.y,
width,
yourTextField.bounds.size.height);
}
Andere Tipps
Warum kann man nicht einfach sagen:
if (yourTextField.frame.size.width > self.frame.size.width) {
yourtextField.frame.size.width = yourtextField.frame.size.width;
}