como dice el titulo estoy tratando de agregar el relleno de un comportamiento similar a un UITextView. El textview se genera cuando la vista es empujado dentro de mi de navegación de control y el código siguiente se produce:

 self.textView.layer.cornerRadius = 7;
 //pretty stuff is pretty

 NSString *description = appDelegate.productInDisplay.description;
 [self.textView setText:description];
 //pretty stuff has content now


 CGRect frame = textView.frame;
 frame.size.height = textView.contentSize.height;
 textView.frame = frame;
 //set the UITextView to the size of it's containing text.

 self.textView.editable = NO;

  self.theScrollView.contentSize = CGSizeMake(320, 250 + textView.frame.size.height);
  //set the parent scrollView's height to fit some other elements with fixed size (250)
  //and the pre-mentioned UITextView

así, funciona todo y esta bien, pero quiero añadir algo de relleno en los 4 lados de la UITextView y he sido incapaz de hacerlo con 3 horas de búsqueda en google para algo que parece bastante fácil. Alguna sugerencia?

  • es justo .. uitextview.textContainerInset = UIEdgeInsetsMake(8,5,8,5); // arriba, izquierda, abajo, derecha … es así de simple
  • (¡por suerte!)!
InformationsquelleAutor magtak | 2011-10-26

8 Comentarios

  1. 24

    EDITAR 1/16/2015: Esto fue escrito en el año 2012 y ya no es exacto. Uso -textContainerInset como se mencionó anteriormente.

    Post Original:

    Utilizando contentInset en realidad no trabajo. Tiene dos razonable de las opciones: subclase UITextField y anular el textRectForBounds: y editingRectForBounds: métodos o crear el campo de texto de forma transparente a través de una UIView y estilo de la UIView.

    Ejemplo de subclases de la UITextField:

    - (CGRect)textRectForBounds:(CGRect)bounds {
         return CGRectInset(bounds, 5, 5);
    }
    
    - (CGRect)editingRectForBounds:(CGRect)bounds {
         return CGRectInset(bounds, 5, 5);
    }

    Ejemplo de envolver en una UIView:

    UIView *wrapView = [[UIView alloc] initWithFrame: CGRectMake(10, 10, 200, 30)];
    [wrapView addSubview:textView];
    wrapView.layer.borderColor = [UIColor darkGrayColor].CGColor;
    wrapView.layer.borderWidth = 2.0;
    wrapView.layer.cornerRadius = 5.0;
    • Esto debe ser aceptado respuesta – el actual no funciona.
    • Esto es mejor que la adición de vacío leftView. Con leftView a veces UITextField no se convierta en la primera respuesta al tocar el texto del marcador de posición de la zona (en iOS 5).
    • No entiendo cómo esto es aceptado como respuesta correcta. La pregunta es para UITextView, no para UITextField. UITextView no tiene este tipo de métodos, así que al menos la primera parte de la respuesta no es correcta. La segunda parte tiene un problema, debido a que el desplazamiento del indicador va a ser mostrado sangría, también.
  2. 76

    El uso de iOS7 yo solo lo ha hecho con

    [self.textView setTextContainerInset:UIEdgeInsetsMake(0, 12, 0, 12)];

    Espero que esto ayude,
    Mário

    • Esto funcionó para mí en iOS 7. De hecho, es la única de las respuestas que se sugieren que trabajó.
    • Mário de Carvalho cualquier alternativa posible para «setTextContainerInset» en iOS 6 ?
    • pruebe este stackoverflow.com/a/15831728/1557663
    • Carvalho es el problema, necesito soporte para iOS 6 y 7, por lo tanto, que la respuesta no será factible. He encontrado este answer para que sea más significativo, pero todavía no resolvió mi problema. Finalmente me terminé usando un contenedor de vista para mi UITextView. Gracias por la ayuda, aunque!
    • Trabajó para mí en iOS7
    • En Swift he utilizado yo.textView.textContainerInset = UIEdgeInsetsMake(50, 50, 50, 50);
    • Esto no parece funcionar si su alineación de texto a la derecha.
    • Se puede hacer en el guión?
    • sí! Compruebe los márgenes de storyboard opciones

  3. 54

    Esta respuesta es totalmente equivocado. La respuesta correcta es simplemente:

    uitextview.textContainerInset =
           UIEdgeInsetsMake(8,5,8,5); //top, left, bottom, right

    (Los valores corresponden a cómo un UITextField en la misma pantalla se ve.)


    Uso este:

    self.textView.contentInset = UIEdgeInsetsMake(5, 5, 5, 5); 
    • En realidad, esto no funciona.
    • de hecho, no funciona. @magtak ¿por Qué aceptó?
    • que vomitar textContainerInset no funciona si la ronda textview las esquinas de programación pero que contetInset no tiene ningún problema en absoluto. Gracias !
  4. 10

    Esto funcionó para mí en el uso de swift 2.0:

    textView.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10)

    • La única respuesta que trabajó para mí en Swift 3
    • Tan simple y funciona perfecto.
    • ¿Hay algo similar para UITextField
  5. 5

    Para Swift 4.2:

    textview.contentInset = UIEdgeInsets(top: 2, left: 10, bottom: 2, right: 10)
  6. 4

    Para Swift 3 – la respuesta parece ser similar, pero ligeramente diferentes:

    textview.contentEdgeInsets = UIEdgeInsets(top: 2, left: 10, bottom: 2, right: 10)

    (De hecho, he utilizado el de arriba UIButtonView, pero como es tan cerrado a las respuestas que fueron publicados para UITextView estoy pensando [esperando] que se aplica para que también)

    • Lo siento por downvoting, pero en verdad no se aplican aquí. En UITextView se llama textView.textContainerInset
    • Swift 4 versión de la misma: textView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 50)
  7. 1

    Esto está trabajando en Swift 5:

    textView.textContainerInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
  8. 0

    Simplemente crear un extension de UITextView utilizando Contenedor Borde del Recuadro de la siguiente manera:

    extension UITextView {
        func leftSpace() {
            self.textContainerInset = UIEdgeInsets(top: 4, left: 6, bottom: 4, right: 4)
        }
    }

    y utilizarlo como:

    let textView = UITextView()
    textView. leftSpace() 

Dejar respuesta

Please enter your comment!
Please enter your name here