UITextView contentInset не работает

Я показываю текст внутри UITextView. Мне нужно добавить к тексту отступ. Когда я использую значение для верхней позиции, это работает. Если я использую значение для другой позиции, это не сработает.

 txtt_bgImage     = [UIImage imageNamed:@"txtt_bg_ipad.png"];
                  txtt_bgImageView = [[UIImageView alloc] initWithImage:txtt_bgImage];

          txtt=[[UITextView alloc]initWithFrame:CGRectMake(170, 300, 400, 250)];

          txtt.text=productDescription;



                  [txtt  setFont: [UIFont fontWithName:@"verdana" size:15]];

                  txtt.textColor=[UIColor whiteColor];

                  [txtt setBackgroundColor:[UIColor clearColor]];


                  txtt.contentInset = UIEdgeInsetsMake(15,0,0,0);

                //  [txtt  setTextContainerInset:UIEdgeInsetsMake(7, 7, 0, 0)];

                  txtt_bgImageView.frame=CGRectMake(170, 300, 400, 250);


                  [self.view addSubview:txtt_bgImageView];

                  txtt.editable=NO;

          NSLog(@"text is %@",txtt.text);

                   object.object_screentext = txtt;

          [self.view addSubview:txtt];

person user3496826    schedule 08.04.2014    source источник


Ответы (3)


Для iOS7 используйте textContainerInset

@property(nonatomic, assign) UIEdgeInsets textContainerInset NS_AVAILABLE_IOS(7_0);

Для Bellow iOS7 используйте contentInset и установите UIEdgeInsetsMake в качестве синтаксиса ниже.

UIKIT_STATIC_INLINE UIEdgeInsets UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) {
    UIEdgeInsets insets = {top, left, bottom, right};
    return insets;
}

В соответствии с вашим кодом вы устанавливаете только верхнюю боковую вставку. Но если вы хотите установить все стороны, вы должны установить вставку содержимого, как показано ниже: -

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
       _TxtViewSummary.contentInset = UIEdgeInsetsMake(10, 0, 10, 0);
    } else {
       _TxtViewSummary.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10);
    }

Это выглядит так: -

введите описание изображения здесь

person Nitin Gohel    schedule 08.04.2014
comment
я уже упоминал, что используется для ios7 с Xcode5, если вы все еще работаете со старым, используйте _TxtViewSummary.contentInset = UIEdgeInsetsMake(10, 0, 10, 0); - person Nitin Gohel; 08.04.2014
comment
Я использую iOS6.1, тогда почему contentInset не работает - person user3496826; 08.04.2014
comment
в конце концов, этот рабочий код проверяет правильность подключения IBOutlate или textviewl. - person Nitin Gohel; 08.04.2014
comment
Я не использую IBOutlet. Я использую код, о котором спрашиваю - person user3496826; 08.04.2014
comment
txtt.contentInset = UIEdgeInsetsMake (15,0,0,0); которые помещают только верхнее пространство, а не левое или правое, сэр, заменяйте его на (10, 0, 10, 0) - person Nitin Gohel; 08.04.2014
comment
(10, 10, 10, 10) поместите эти первые 10 для верхнего, второго для левого, третьего для нижнего и четвертого для правого. - person Nitin Gohel; 08.04.2014
comment
Если я использую отрицательное значение, например -20, оно работает с реверсом. почему это не работает в положительном значении? - person user3496826; 08.04.2014

Использовать это:

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

Кроме того, правильный способ позиционирования элемента - в методе layoutSubviews.

person Vinay Jain    schedule 08.04.2014
comment
Нет видимого @Interface 'UITextView' объявляет селектор setTextContainerInset - person user3496826; 08.04.2014
comment
Это для iOS7. До версий iOS 7 вам нужно использовать contentInset. - person Vinay Jain; 09.04.2014

Другое возможное решение:

self.textView.contentInset = UIEdgeInsets(top: 740.0, left: 0, bottom: 20.0, right: 0)
self.textView.contentOffset = CGPoint(x: 0, y: -740)

У меня возникло нежелательное поведение, при котором textContentInset с самого начала правильно размещал текст, но затем содержимое прокручивалось за пределы экрана.

person C4 - Travis    schedule 06.04.2016