1. ホーム
  2. ios

[解決済み] iOS7でのUITextfieldのleftView/rightView paddingについて

2023-02-06 12:35:06

質問

iOS7でUITextFieldのleftViewとrightViewのビューが、テキストフィールドの境界線に非常に近いです。

これらのアイテムにいくつかの(水平)パディングを追加するにはどうすればよいですか?

フレームを変更しようとしましたが、うまくいきません。

uint padding = 10;//padding for iOS7
UIImageView * iconImageView = [[UIImageView alloc] initWithImage:iconImage];    
iconImageView.frame = CGRectMake(0 + padding, 0, 16, 16);
textField.leftView = iconImageView;

なお、テキストフィールドのテキストにパディングを追加するのは、以下のように UITextBorderStyleNoneを使用してUITextFieldにパディングを設定する。

どのように解決するのですか?

ちょうど私自身がこの問題に取り組んでいて、この解決策を使いました。

- (CGRect) rightViewRectForBounds:(CGRect)bounds {

    CGRect textRect = [super rightViewRectForBounds:bounds];
    textRect.origin.x -= 10;
    return textRect;
}

これは、iOS 7では画像が端に押し込められていたのを、右から10個分移動させるものです。

さらに、これはサブクラスで UITextField で作成することができます。

  1. のサブクラスである新しいファイルを作成します。 UITextField のサブクラスで、デフォルトの NSObject
  2. という名前の新しいメソッドを追加します。 - (id)initWithCoder:(NSCoder*)coder を追加し、画像を設定します。

    - (id)initWithCoder:(NSCoder*)coder {
        self = [super initWithCoder:coder];
    
        if (self) {
    
            self.clipsToBounds = YES;
            [self setRightViewMode:UITextFieldViewModeUnlessEditing];
    
            self.leftView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"textfield_edit_icon.png"]];
        }
    
        return self;
    }
    
    
  3. をインポートする必要があるかもしれません。 #import <QuartzCore/QuartzCore.h>

  4. を追加します。 rightViewRectForBounds メソッドを追加します。

  5. Interface Builder で、サブクラス化したい TextField をクリックし、class 属性をこの新しいサブクラスの名前に変更します。