UITextView에서 여백 / 패딩을 잃는 방법?


486

나는이 UITextView많은 양의 텍스트를 표시 내 아이폰 OS 응용 프로그램에서.

그런 다음의 오프셋 여백 매개 변수를 사용 하여이 텍스트를 페이징합니다 UITextView.

내 문제는 사용하는 UITextView글꼴 크기와 서체에 따라 다르게 보이는 것처럼 패딩이 계산을 혼란스럽게한다는 것입니다.

따라서 나는 다음과 같은 질문을 제기합니다 :의 내용을 둘러싼 패딩을 제거 할 수 UITextView있습니까?

답변을 기다리겠습니다!


9
이 품질 보증은 거의 10 살입니다. iOS 에서 가장 어리석은 문제 중 하나이기 때문에 100,000 회 이상의 조회수를 제공합니다 . FTR 나는 2017 년 현재, 간단하고 평소 / 허용되는 솔루션을 아래 답변으로 제시했습니다.
Fattie

1
IOS 3.0이 출시 된 2009 년에 하드 코딩 된 해결 방법을 작성하여 여전히 이것에 대한 업데이트를받습니다. 방금 오래된 버전임을 명시하고 허용 된 상태를 무시하기 위해 답변을 편집했습니다.
Michael

답변:


383

2019 년 최신

iOS에서 가장 심각한 버그 중 하나입니다.

여기에 주어진 수업 UITextViewFixed은 일반적으로 가장 합리적인 솔루션입니다.

수업은 다음과 같습니다.

@IBDesignable class UITextViewFixed: UITextView {
    override func layoutSubviews() {
        super.layoutSubviews()
        setup()
    }
    func setup() {
        textContainerInset = UIEdgeInsets.zero
        textContainer.lineFragmentPadding = 0
    }
}

인스펙터에서 scrollEnabled를 끄는 것을 잊지 마십시오!

  1. 솔루션은 스토리 보드에서 올바르게 작동합니다

  2. 솔루션은 런타임에 올바르게 작동합니다

그게 다야, 끝났어.

일반적으로 대부분의 경우 필요한 것입니다 .

텍스트보기의 높이를 즉석 에서 변경하더라도 UITextViewFixed일반적으로 필요한 모든 것을 수행합니다.

(즉석에서 높이를 변경하는 일반적인 예는 사용자 유형에 따라 높이를 변경하는 것입니다.)

Apple에서 깨진 UITextView는 다음과 같습니다.

UITextView가있는 IB 스크린 샷

여기 있습니다 UITextViewFixed:

UITextViewFixed를 사용한 IB 스크린 샷

물론 당신은해야합니다

인스펙터에서 scrollEnabled를 끄십시오!

scrollEnabled를 끄는 것을 잊지 마십시오! :)


몇 가지 추가 문제

(1) 유동적이면서 동적으로 변화하는 셀 높이를 가진 테이블의 경우와 같은 비정상적인 경우 애플은 기괴한 일을한다. 그들은 바닥에 여분의 공간을 추가한다 . 아냐! 이것은 iOS에서 가장 분노한 것들 중 하나 여야합니다.

위의 내용에 추가 할 수있는 "빠른 수정 사항"은 일반적으로 그 광기에 도움이됩니다.

...
        textContainerInset = UIEdgeInsets.zero
        textContainer.lineFragmentPadding = 0

        // this is not ideal, but you can sometimes use this
        // to fix the "extra space at the bottom" insanity
        var b = bounds
        let h = sizeThatFits(CGSize(
           width: bounds.size.width,
           height: CGFloat.greatestFiniteMagnitude)
       ).height
       b.size.height = h
       bounds = b
 ...

(2) 때로는 또 다른 미묘한 Apple 엉망을 해결하려면 다음을 추가해야합니다.

override func setContentOffset(_ contentOffset: CGPoint, animated: Bool) {
    super.setContentOffset(contentOffset, animated: false)
}

(3) 틀림없이 다음을 추가 해야 합니다.

contentInset = UIEdgeInsets.zero

에서 직후 .lineFragmentPadding = 0UITextViewFixed.

그러나 ... 믿거 나 말거나 ... 현재 iOS 에서는 작동하지 않습니다 ! (2019 년에 확인 됨) 향후 해당 라인을 추가해야 할 수도 있습니다.

UITextViewiOS에서 깨어진 사실 은 모든 모바일 컴퓨팅에서 가장 이상한 것 중 하나입니다. 이 질문의 10 년 기념일은 여전히 ​​고정되어 있지 않습니다!

마지막으로, 텍스트 필드 와 비슷한 팁이 있습니다 : https://stackoverflow.com/a/43099816/294884

완전히 임의의 팁 : 끝에 "..."를 추가하는 방법

종종 "UILabel과 같은"UITextView를 사용하고 있습니다. 따라서 줄임표 "..."를 사용하여 텍스트를 자르기를 원합니다.

그렇다면 "setup"에 세 번째 코드 줄을 추가하십시오.

 textContainer.lineBreakMode = .byTruncatingTail

텍스트가 없을 때 높이가 0 인 경우 유용한 팁

텍스트보기를 사용하여 텍스트 만 표시하는 경우가 종종 있습니다. 따라서 사용자는 실제로 아무것도 편집 할 수 없습니다. "0"줄을 사용하면 텍스트 줄 수에 따라 텍스트보기의 높이가 자동으로 변경됩니다.

대단하지만, 텍스트가 전혀 없다면 불행히도 한 줄의 텍스트가 있는 것과 같은 높이를 얻습니다 !! 텍스트 뷰는 절대로 사라지지 않습니다.

여기에 이미지 설명을 입력하십시오

"가져 가기"를 원한다면, 이것을 추가하십시오

override var intrinsicContentSize: CGSize {
    var i = super.intrinsicContentSize
    print("for \(text) size will be \(i)")
    if text == "" { i.height = 1.0 }
    print("   but we changed it to \(i)")
    return i
}

여기에 이미지 설명을 입력하십시오

(나는 그것을 '1'로 만들었으므로 무슨 일이 일어나고 있는지, '0'은 괜찮습니다.)

UILabel은 어떻습니까?

텍스트를 표시 할 때 UILabel은 UITextView보다 많은 장점이 있습니다. UILabel은이 QA 페이지에 설명 된 문제를 겪지 않습니다. 실제로 우리 모두가 일반적으로 "포기"하고 UITextView를 사용하는 이유는 UILabel을 다루기가 어렵 기 때문입니다. 특히 UILabel에 padding 을 올바르게 추가하는 것은 엄청나게 어렵습니다 . 여기 사실 "마지막으로"제대로 UILabel의 패딩을 추가하는 방법에 대한 전체 설명이다 https://stackoverflow.com/a/58876988/294884 동적 높이 세포 어려운 레이아웃을하고 있다면 어떤 경우에는, 그것은 때때로 UILabel로 힘들게하는 것이 좋습니다.


1
나는 self.textView.isScrollEnabled = false안으로 viewDidLayoutSubviews()들어갔다. 애플은 단지 : 우리가 농구를 통해 도약 좋아
AnBisw

1
동적 높이 (UITableViewAutomaticDimension)로 UITableView 셀, 머리글 및 바닥 글의 모든 불합리한 UITextView 자동 레이아웃 버그를 수정하는 최상의 솔루션입니다. 큰!
Peter Kreinz

1
@Fattie의 답변에 대한 업데이트 된 답변을 게시하여 활성화 / 비활성화의 특별한 트릭을 사용하여 모든 삽입물을 실제로 제거하는 데 도움이되었습니다 translatesAutoresizingMaskIntoConstraints. 이 답변만으로 자동 레이아웃을 사용하여 뷰 계층 구조에서 모든 여백 (일부 이상한 바닥 여백이 사라지는 것을 막을 수 없음)을 제거 할 수 없었습니다. 또한 systemLayoutSizeFitting버그를 사용하여 이전에 잘못된 크기를 반환 한을 사용하여 뷰 크기 계산 을 처리합니다.UITextView
Fab1n

1
IBDesignable의 경우 1up입니다. 내가 할 수있는 한, 아주 잘 선택된 자리 표시 자 텍스트에 대한
찬사를 보냈다

1
표에 textviews가 있었는데 한 줄의 텍스트가있는 텍스트의 높이가 올바르게 계산되지 않았습니다 (자동 레이아웃). 이 문제를 해결하려면 didMoveToSuperview를 재정의하고 설정을 호출해야했습니다.
El Horrible

791

iOS 7.0의 경우 contentInset 트릭이 더 이상 작동하지 않는 것으로 나타났습니다. 이것은 iOS 7에서 여백 / 패딩을 제거하는 데 사용한 코드입니다.

이것은 텍스트의 왼쪽 가장자리를 컨테이너의 왼쪽 가장자리로 가져옵니다.

textView.textContainer.lineFragmentPadding = 0

이로 인해 텍스트 상단이 컨테이너 상단과 정렬됩니다.

textView.textContainerInset = .zero

여백 / 패딩을 완전히 제거하려면 두 줄이 모두 필요합니다.


2
이것은 두 줄로 나를 위해 일하고 있지만 5 줄에 도달하면 텍스트가 잘립니다.
living124124

7
두 번째 줄은 다음과 같이 쓸 수도 있습니다 : self.descriptionTextView.textContainerInset = UIEdgeInsetsZero;
jessepinho

19
lineFragmentPadding0으로 설정 하는 것은 내가 찾던 마술입니다. Apple이 UITextView 내용을 다른 컨트롤과 정렬하기가 왜 그렇게 어려운지 모르겠습니다.
phatmann

3
이것이 정답입니다. 이 솔루션에서는 가로로 스크롤 할 수 없습니다.
Michael

2
lineFragmentPadding여백을 수정하기위한 것이 아닙니다. 로부터 문서 라인 조각 패딩 텍스트 마진을 표현하도록 설계되지 않았습니다. 대신 텍스트보기에 삽입을 사용하거나 단락 여백 속성을 조정하거나 슈퍼 뷰 내에서 텍스트보기의 위치를 ​​변경해야합니다.
Martin Berger

256

이 대안은 2009 년 IOS 3.0이 출시되었을 때 작성되었습니다. 더 이상 적용되지 않습니다.

나는 똑같은 문제에 부딪쳤다. 결국 나는

nameField.contentInset = UIEdgeInsetsMake(-4,-8,0,0);

여기서 nameField는입니다 UITextView. 내가 사용했던 글꼴은 Helvetica 16 포인트였습니다. 내가 그리는 특정 필드 크기에 대한 맞춤형 솔루션 만입니다. 이렇게하면 왼쪽 오프셋이 왼쪽과 플러시되고 상자에 대한 상단 오프셋이 그려집니다.

또한 UITextViews기본 계약을 사용하는 경우 에만 적용됩니다 .

nameField.textAlignment = NSTextAlignmentLeft;

예를 들어 오른쪽에 맞추면 UIEdgeInsetsMake오른쪽 가장자리에 전혀 영향을 미치지 않는 것 같습니다.

최소한 .contentInset 속성을 사용하면 필드를 "올바른"위치에 배치하고을 오프셋하지 않고 편차를 수용 할 수 있습니다 UITextViews.


1
예, iOS 7에서 작동합니다. UIEdgeInset이 올바른 값으로 설정되어 있는지 확인하십시오. UIEdgeInsetsMake (-4, -8,0,0)와 다를 수 있습니다.
app_

15
iOS 7에서 UIEdgeInsetsMake (0, -4,0, -4)가 가장 효과적이라는 것을 알았습니다.
Racura

2
예, 숫자는 예시입니다. "그는 내가 그리는 특정 필드 크기에 대한 사용자 지정 솔루션입니다"라고 말했습니다. 주로 나는 당신이 당신의 독특한 레이아웃 상황을 위해 숫자를 가지고 놀아야한다고 설명하려고했습니다.
Michael

3
UITextAlignmentLeft는 iOS 7에서 더 이상 사용되지 않습니다. NSTextAlignmentLeft를 사용하십시오.
Jordi Kroon

7
사람들이 하드 코딩 된 값을 사용하는 답변을 찬성하는 이유를 알 수 없습니다. 향후 버전의 iOS에서는 깨질 가능성이 매우 높으며 단지 나쁜 생각입니다.
ldoogy

77

이미 제공된 좋은 답변 중 일부를 작성하면 iOS 7.0 이상에서 작동하는 순수한 스토리 보드 / 인터페이스 빌더 기반 솔루션이 있습니다.

다음 키에 대해 UITextView의 사용자 정의 런타임 속성 을 설정하십시오 .

textContainer.lineFragmentPadding
textContainerInset

인터페이스 빌더


4
이것은 특히 XIB 전용 솔루션이 필요한 경우에 가장 좋은 대답입니다.
yano

16
복사 / 붙여 넣기 : textContainer.lineFragmentPadding | textContainerInset
Luca De Angelis

3
이것은 3 년 후에도 아름다운 답변을 쉽고 쉽게 만들어줍니다. :)
Shai Mishali


41

실제 여백은 사용자 글꼴 크기 설정 등에 따라 변경 될 수 있으므로 하드 코딩 된 값과 관련된 답변을 피할 수 있습니다.

여기에 @ user1687195의 답변이 있습니다 textContainer.lineFragmentPadding( 문서 상태가 의도 된 사용법이 아니기 때문에 ).

이것은 iOS 7 이상에서 효과적입니다.

self.textView.textContainerInset = UIEdgeInsetsMake(
                                      0, 
                                      -self.textView.textContainer.lineFragmentPadding, 
                                      0, 
                                      -self.textView.textContainer.lineFragmentPadding);

이것은 사실상 동일한 결과이며 lineFragmentPadding 속성을 오용하지 않는다는 점에서 조금 더 깔끔합니다.


이 답변을 기반으로 다른 솔루션을 시도했지만 훌륭하게 작동합니다. 해결책은 다음과 같습니다.self.textView.textContainer.lineFragmentPadding = 0;
Bakyt Abdrasulov

1
@ BakytAbdrasulov 내 답변을 읽으십시오. 귀하의 솔루션이 작동하는 동안 문서와 일치하지 않습니다 (내 답변의 링크 참조). lineFragmentPadding여백을 제어하기위한 것이 아닙니다. 당신이 사용해야하는 이유 textContainerInset입니다.
ldoogy

20

사용자 정의 런타임 속성을 사용하는 스토리 보드 또는 인터페이스 빌더 솔루션 :

스크린 샷은 iOS 7.1 및 iOS 6.1의입니다 contentInset = {{-10, -5}, {0, 0}}.

사용자 정의 런타임 속성

산출


1
iOS 7에서 저를 위해 일했습니다.
kubilay 2016 년

사용자 정의 런타임 속성에 대해서만 가능-대단합니다!
hris. to December

16

이 모든 답변은 제목 질문에 관한 것이지만 OP 질문의 본문에 제시된 문제에 대한 해결책을 제안하고 싶었습니다.

텍스트 내용의 크기

내부의 텍스트 크기를 계산하는 빠른 방법 UITextView은 다음을 사용하는 것입니다 NSLayoutManager.

UITextView *textView;
CGSize textSize = [textView usedRectForTextContainer:textView.textContainer].size;

전체 스크롤 가능 콘텐츠를 제공하며 이는 UITextView프레임 보다 클 수 있습니다 . textView.contentSize실제로 텍스트가 차지하는 공간을 계산 하기 때문에 이보다 훨씬 정확한 것으로 나타 났습니다. 예를 들어, 비어있는 경우 UITextView:

textView.frame.size = (width=246, height=50)
textSize = (width=10, height=16.701999999999998)
textView.contentSize = (width=246, height=33)
textView.textContainerInset = (top=8, left=0, bottom=8, right=0)

선 높이

UIFont주어진 글꼴의 줄 높이를 빠르게 얻을 수있는 속성이 있습니다. 따라서 다음에서 텍스트의 줄 높이를 빠르게 찾을 수 있습니다 UITextView.

UITextView *textView;
CGFloat lineHeight = textView.font.lineHeight;

보이는 텍스트 크기 계산

실제로 표시되는 텍스트 양을 결정하는 것은 "페이징"효과를 처리하는 데 중요합니다. 실제로 실제 텍스트와 텍스트 사이의 여백 인 UITextView속성 textContainerInsetUITextView.frame있습니다. 보이는 프레임의 실제 높이를 계산하려면 다음 계산을 수행 할 수 있습니다.

UITextView *textView;
CGFloat textViewHeight = textView.frame.size.height;
UIEdgeInsets textInsets = textView.textContainerInset;
CGFloat textHeight = textViewHeight - textInsets.top - textInsets.bottom;

페이징 크기 결정

마지막으로, 보이는 텍스트 크기와 내용이 있으므로 : textHeight에서 빼서 오프셋을 결정해야 합니다 textSize.

// where n is the page number you want
CGFloat pageOffsetY = textSize - textHeight * (n - 1);
textView.contentOffset = CGPointMake(textView.contentOffset.x, pageOffsetY);

// examples
CGFloat page1Offset = 0;
CGFloat page2Offset = textSize - textHeight
CGFloat page3Offset = textSize - textHeight * 2

이 모든 방법을 사용하여 삽입물을 만지지 않았고 원하는 텍스트의 캐럿이나 어디든지 갈 수있었습니다.


12

textContainerInset속성을 사용할 수 있습니다 UITextView:

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

(위 왼쪽 아래 오른쪽)


1
왜 이것이 최선의 대답으로 지정되지 않았는지 궁금합니다. textContainerInset은 실제로 내 요구를 충족 시켰습니다.
KoreanXcodeWorker 2016

textContainerInset새 값으로 변경하려고 할 때 속성 의 맨 아래 값 업데이트 가 작동하지 않습니다 ( stackoverflow.com/questions/19422578/… 참조) .
Evan R

@MaggiePhillips 하드 코딩 된 값이 올바른 방법 일 수는 없으며 어떤 경우에는 실패 할 수 있으므로 최선의 대답은 아닙니다. lineFragmentPadding을 고려해야합니다.
ldoogy

11

iOS 10의 경우 다음 행이 상단 및 하단 패딩 제거에 작동합니다.

captionTextView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0)

Xcode 8.2.1. 이 답변에서 언급 한 것과 동일한 문제입니다. 내 해결책은 값을 UIEdgeInsets (상단 : 0, 왼쪽 : -4.0, 하단 : 0, 오른쪽 : -4.0)로 편집하는 것이 었습니다.
Darkwonder

UIEdgeInset.zeroXCode 8.3 및 iOS 10.3 시뮬레이터를 사용하여 작동
Simon Warta

10

최신 스위프트 :

self.textView.textContainerInset = .init(top: -2, left: 0, bottom: 0, right: 0)
self.textView.textContainer.lineFragmentPadding = 0

좋은 대답입니다. 이 답변은 추가 상단 삽입을 제거합니다. textView.textContainerInset = UIEdgeInsets.zero는 상단 삽입에서 2 픽셀을 제거하지 않습니다.
korgx9

10

다음은 Fattie의 매우 유용한 답변의 업데이트 된 버전입니다. iOS 10 및 11에서 레이아웃을 작동시키는 데 도움이되는 두 가지 중요한 줄을 추가합니다 (아마도 낮은 줄에서도 가능).

@IBDesignable class UITextViewFixed: UITextView {
    override func layoutSubviews() {
        super.layoutSubviews()
        setup()
    }
    func setup() {
        translatesAutoresizingMaskIntoConstraints = true
        textContainerInset = UIEdgeInsets.zero
        textContainer.lineFragmentPadding = 0
        translatesAutoresizingMaskIntoConstraints = false
    }
}

중요한 translatesAutoresizingMaskIntoConstraints = <true/false>내용 은 두 문장입니다!

이것은 내 모든 상황에서 모든 마진 을 놀랍게 제거합니다 !

(가) 동안 textView최초의 응답자 아니다 그것을 사용하여 해결할 수없는 이상한 아래쪽 여백이 있음 일어날 수있는 sizeThatFits허용 대답에 언급 된 방법을.

textView를 탭하면 갑자기 이상한 아래쪽 여백이 사라지고 모든 것이 정상적으로 보이지만 textView가 도착하자마자 나타납니다 firstResponder.

그래서 여기에 읽은 translatesAutoresizingMaskIntoConstraints통화에서 프레임 / 경계를 수동으로 설정할 때 활성화 및 비활성화 가 도움이됩니다.

다행히도 이것은 프레임 설정뿐만 아니라 setup()translatesAutoresizingMaskIntoConstraints통화 사이에 2 줄의 샌드위치로 작동 합니다!

예를 들어에를 사용하여 보기의 프레임을 계산할 때 매우 유용 합니다 . 올바른 크기를 돌려줍니다 (이전에는 없었습니다)!systemLayoutSizeFittingUIView

원래의 답변에서와 같이 :
Inspector에서 scrollEnabled를 끄는 것을 잊지 마십시오!
이 솔루션은 스토리 보드 및 런타임에 올바르게 작동합니다.

그거야 그, 지금 당신이있어 정말 다!


5

스위프트 4, Xcode 9

다음 함수를 사용하면 UITextView에서 텍스트의 여백 / 패딩을 변경할 수 있습니다

공용 func UIEdgeInsetsMake (_ 상단 : CGFloat, _ 왼쪽 : CGFloat, _ 하단 : CGFloat, _ 오른쪽 : CGFloat)-> UIEdgeInsets

이 경우

 self.textView?.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0)

3

삽입 솔루션을 수행하면서도 여전히 오른쪽과 아래쪽에 패딩이있었습니다. 또한 텍스트 정렬로 인해 문제가 발생했습니다. 내가 찾은 유일한 확실한 방법은 텍스트보기를 경계에 잘린 다른보기 안에 넣는 것입니다.


3

다음은 앱의 모든 텍스트보기에서 Apple의 기본 여백을 제거하는 쉬운 확장 기능입니다.

참고 : Interface Builder에는 여전히 이전 마진이 표시되지만 앱은 예상대로 작동합니다.

extension UITextView {

   open override func awakeFromNib() {
      super.awakeFromNib();
      removeMargins();
   }

   /** Removes the Apple textview margins. */
   public func removeMargins() {
      self.contentInset = UIEdgeInsetsMake(
         0, -textContainer.lineFragmentPadding,
         0, -textContainer.lineFragmentPadding);
   }
}

1

나에게 (iOS 11 & Xcode 9.4.1) 마술처럼 작동하는 것은 textView.font 속성을 UIFont.preferred(forTextStyle:UIFontTextStyle) 스타일 로 설정하고 @Fattie가 언급 한 첫 번째 대답이었습니다. 그러나 textView.font 속성을 설정할 때까지 @Fattie 답변이 작동하지 않았습니다. 그렇지 않으면 UITextView가 비정상적으로 동작합니다.


1

최신 Swift 버전을 찾는 사람이라면 Xcode 10.2Swift 4.2에서 아래 코드가 정상적으로 작동합니다.

yourTextView.textContainerInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

0

UITextView의 하위보기에서 텍스트로보기를 가져오고 하위 클래스의 layoutSubview 메소드에서 설정하는 또 다른 접근법을 찾았습니다.

- (void)layoutSubviews {
    [super layoutSubviews];

    const int textViewIndex = 1;
    UIView *textView = [self.subviews objectAtIndex:textViewIndex];
    textView.frame = CGRectMake(
                                 kStatusViewContentOffset,
                                 0.0f,
                                 self.bounds.size.width - (2.0f * kStatusViewContentOffset),
                                 self.bounds.size.height - kStatusViewContentOffset);
}

0

textView 스크롤은 텍스트의 위치에 영향을 미치며 세로 중앙에 있지 않은 것처럼 보이게합니다. 스크롤을 비활성화하고 상단 삽입을 0으로 설정하여보기에서 텍스트를 가운데에 배치했습니다.

    textView.scrollEnabled = NO;
    textView.textContainerInset = UIEdgeInsetsMake(0, textView.textContainerInset.left, textView.textContainerInset.bottom, textView.textContainerInset.right);

어떤 이유로 나는 아직 그것을 알아 내지 못했지만 커서는 입력을 시작하기 전에 가운데에 있지 않지만 입력을 시작하자마자 텍스트가 가운데에 위치합니다.


0

HTML 문자열을 설정하고 하단 패딩을 피하려면 블록 태그 (예 : div, p)를 사용하지 않아야합니다.

제 경우에는 이것이 이유였습니다. 블록 태그를 스팬 태그로 대체하여 쉽게 테스트 할 수 있습니다.


0

SwiftUI의 경우

사용하여 자체 TextView를 만들고 UIViewRepresentable패딩을 제어하려는 경우 makeUIView함수에서 간단히 다음을 수행하십시오.

uiTextView.textContainerInset = UIEdgeInsets(top: 10, left: 18, bottom: 0, right: 18)

또는 원하는대로.


-4
[firstNameTextField setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.