UITextField文本不在左侧滚动

时间:2015-09-04 08:25:42

标签: ios uitextfield

我有一个UITextField子类,我已经覆盖了一些方法(参见下面的代码)。问题是,当我输入它并且文本达到严格边距时,它将不再显示我正在键入的内容。在查看调试模式中,我看到UIFieldEditor比文本提交的要宽得多。

这是UITextFiled子类代码:

- (instancetype)init
{
    self = [super init];
    if (self) {
       self.edgeInsets = UIEdgeInsetsMake(7, 0, 10, 15);
    }
    return self;
}

- (id)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        self.edgeInsets = UIEdgeInsetsMake(7, 0, 10, 15);
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if(self){
        self.edgeInsets = UIEdgeInsetsMake(7, 0, 10, 15);
    }
    return self;
}

- (CGRect)textRectForBounds:(CGRect)bounds {
    return [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)];
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    return [super editingRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)];
}

以下是我使用此类的代码:

// alloc / init 
        _myTextField.delegate = self;
        _myTextField.backgroundColor = [UIColor whiteColor];
        _myTextField.layer.masksToBounds = YES;
        _myTextField.layer.cornerRadius = 3.0;
        _myTextField.returnKeyType = UIReturnKeyDone;
        _myTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
        _myTextField.autocapitalizationType = UITextAutocapitalizationTypeWords;
        _myTextField.autocorrectionType = UITextAutocorrectionTypeNo;
        _myTextField.hidden = YES;

        _tfButton = [UIButton buttonWithType:UIButtonTypeSystem];
        [_tfButton setImage:[UIImage imageNamed:@"ic_edit"] forState:UIControlStateNormal];
        [self fs_addSubview:_tfButton];
        [_tfButton constrainWidth:22.];
        [_tfButton setTintColor:[UIColor greenColor]];
        [_tfButton constrainHeight:22.];
        [_tfButton constrainToRightOfView:_myTextField margin:-25.0];
        [_tfButton constrainEqualCenterYWithView:_myTextField offset:0.0];
        [_tfButton setUserInteractionEnabled:NO];


        UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 5)];

        _myTextField.leftView = leftView;
        _myTextField.leftViewMode = UITextFieldViewModeAlways;

当用户在此文本字段中键入大字符串时,如何让文本在左侧滚动?

5 个答案:

答案 0 :(得分:7)

您的代码完全正确。问题来自UITextField类。 当您在故事板中放入UITextField时,将其设置为fontSize和minFontSize为50.此系统textField将与您的自定义textField具有相同的问题。

这只是因为UITextField不知道如何在狭窄的空间中绘制大字体。

我使用了textField的子类(默认高度为30),在将字体大小更改为7后,一切正常。

答案 1 :(得分:3)

我遇到了同样的问题,但我没有任何UITextField子类。 问题是textfield在文本字段高度和字体大小之间有一定的比例。将字体大小增加到特定值w.r.t textfield height会导致此问题。我所做的是减少了字体大小,文本字段再次开始工作。

答案 2 :(得分:2)

我有另一个解决方案。如果你在最小字体大小下面勾选“调整到合适”选项(在故事板上),它显然会起作用。如果键入的内容超过右边距,文本将以某种方式缩小。

或使用代码:

self.textField.minimumFontSize = 12;
self.textField.adjustsFontSizeToFitWidth = YES;

答案 3 :(得分:0)

将字体大小从18减少到16为我修复了它。不知道为什么而且不在乎:D

searchTF = [UITextField new];
searchTF.frame = CGRectMake(10, 10, w-140, 20);
searchTF.backgroundColor = [UIColor redColor];
searchTF.font = [UIFont fontWithName:@"HelveticaNeue" size:18.0f];

searchTF.font = [UIFont fontWithName:@"HelveticaNeue" size:16.0f];

答案 4 :(得分:-1)

有点着色,这是我在尝试重现你的代码后得到的东西,它看起来对我好。你能更具体地说明预期的行为吗?

enter image description here