web-dev-qa-db-ja.com

iOSでUITextViewのコンテンツインセットを設定する方法

私はUITextViewを持っているし、コンテンツインセットを

[atextView setContentInset:UIEdgeInsetsMake(0, 10, 0, 0)];

このコードはiOS 6.1以下で動作しますが、iOS 7.0では何も起こりません。

36
Muruganandham K

答えを得た:

[atextView  setTextContainerInset:UIEdgeInsetsMake(7, 7, 0, 0)];

私の問題を修正しました。

そして、Swiftでは...

@IBOutlet var tv:UITextView!
override func awakeFromNib() {
    super.awakeFromNib()
    tv.textContainerInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}

PDATE:それを行う別のオプション

UIView *spacerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
[msgtext setLeftViewMode:UITextFieldViewModeAlways];
[msgtext setLeftView:spacerView];
132
Muruganandham K

UITextFieldをサブクラス化し、@ IBInspectableインセットプロパティを追加することにより、これを実行するための、もう少し便利な方法があります。

import UIKit

class UITextfieldWithInset: UITextField {

    @IBInspectable
    var textfieldInset: CGPoint = CGPointMake(0, 0)

    override func textRectForBounds(bounds: CGRect) -> CGRect {
        return CGRectInset(bounds, textfieldInset.x, textfieldInset.y)
    }

    override func editingRectForBounds(bounds: CGRect) -> CGRect {
        return CGRectInset(bounds, textfieldInset.x, textfieldInset.y)
    }

    override func placeholderRectForBounds(bounds: CGRect) -> CGRect {
        return CGRectInset(bounds, textfieldInset.x, textfieldInset.y)
    }

}
2
Bence Pattogato