2016-06-07 4 views
0

줄을 preferredMaxLayoutWidth을 사용하여 자동으로 배열하려고했습니다. 왜 이것이 작동하지 않는지 나는 알 수 없다.여러 줄 NSTextField가 작동하지 않습니다.

class ViewController: NSViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     let textField = NSTextField() 
     textField.cell!.usesSingleLineMode = false 
     textField.cell!.wraps = true 
     textField.cell!.lineBreakMode = .byCharWrapping 
     view.addSubview(textField) 

     textField.translatesAutoresizingMaskIntoConstraints = false 
     NSLayoutConstraint.activate([ 
     textField.topAnchor.constraintEqual(to: view.topAnchor), 
     textField.leadingAnchor.constraintEqual(to: view.leadingAnchor), 
     textField.widthAnchor.constraintEqual(toConstant: 20) 
     ]) 
     textField.preferredMaxLayoutWidth = 20 
     textField.stringValue = "abcdefghijklmnopqrstuvwxyz" 

     view.needsLayout = true 
     view.layoutSubtreeIfNeeded() 
     print("Intrinsic content size: \(textField.intrinsicContentSize)") 
     print("Fitting size: \(textField.fittingSize)") 
    } 
} 

이 인쇄 :

고유 콘텐츠 사이즈 (-1.0, 21.0)

피팅 사이즈 :

(21.0의 크기는 (20.0, 21.0) 단일 라인.)

+0

무엇을 작동하지? 한 줄에 한 글자 만 표시되도록 너비를 설정 한 것 같습니다. –

+0

@ l' L' l 너비는 20 포인트로 제한됩니다. 나는'NSTextField'가 모든 텍스트를 수용 할만큼 충분히 큰 높이를 반환 할 것으로 기대합니다. – fumoboy007

+0

그래서 'heightAnchor'에 대한 제약 조건을 사용하지 않으시겠습니까? –

답변

0

확인. 따라서 NSTextField이 편집 모드에있을 때 NSTextView (일명 "필드 편집기") 비밀 번호가 편집 부분에 사용됩니다. 편집이 끝날 때까지 텍스트 변경 사항이 텍스트 필드에 다시 동기화되지 않습니다. 이것은 내 샘플 코드가 비 편집 모드에서만 작동하는 이유를 설명합니다.

NSTextField.stringValue 속성에 액세스하여 강제로 동기화를 실행할 수 있습니다. 이것이 NSTextField 하위 클래스에서 수행 한 작업입니다. 또한 애플의 구현이 편집 모드에서 작동하지 않고 비 편집 모드에서 버그가있어서 intrinsicContentSize의 구현을 제공했습니다.

0

자동 제약 조건과 Interface Builder를 사용하여 NSTextField을 여러 줄로 만드는 또 다른 솔루션이 있습니다.

  • 줄 바꿈 옵션에서 Character Wrap을 선택 레이아웃
  • 에서 Wraps를 선택
  • unchecked

을하고 샘플 제약 아래에 추가해야합니다 단일 라인 모드를 사용

,
  • 후행 공간
  • 원하는 상수 공간
  • 바닥 공간
  • 최고의 공간

을 선도. 그리고 특정 높이 제한을 추가하지 마십시오.

다음은 유용한 몇 가지 스크린 샷입니다.

Constraints

NSTextField Settings

관련 문제