>source

신속하고 새로운 입력 필드를 만드는 중입니다. 내 문제는 그림과 같이 레이블을 만들고 싶다는 것입니다.

지금까지 StackViews를 사용하고 있습니다. 입력 필드에 대한 수직 하나, 제목과 사용자 입력에 대한 세 개의 수평 하나 지금까지 내 코드는 다음과 같습니다.

// Initialize outter stackview
    let feedbackOutterSV = UIStackView()
    view.addSubview(feedbackOutterSV)
    feedbackOutterSV.translatesAutoresizingMaskIntoConstraints = false
    feedbackOutterSV.axis = NSLayoutConstraint.Axis.vertical
    NSLayoutConstraint.activate([
        feedbackOutterSV.topAnchor.constraint(equalTo: tutorialText.bottomAnchor, constant: 10),
        feedbackOutterSV.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
        feedbackOutterSV.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
        feedbackOutterSV.heightAnchor.constraint(equalToConstant: 300)
    ])
    // Initalize inner stackview for title
    let feedbackInnerSVTitle = UIStackView()
    feedbackOutterSV.addArrangedSubview(feedbackInnerSVTitle)
    feedbackInnerSVTitle.translatesAutoresizingMaskIntoConstraints = false
    feedbackInnerSVTitle.axis = .horizontal
    feedbackInnerSVTitle.alignment = .fill
    feedbackInnerSVTitle.distribution = .fillProportionally
    let titleLabel = UILabel()
    feedbackInnerSVTitle.addArrangedSubview(titleLabel)
    titleLabel.translatesAutoresizingMaskIntoConstraints = false
    titleLabel.text = "feedback.input.title".localize()
    titleLabel.font = UIFont.preferredFont(forTextStyle: .body)
    titleLabel.textColor = .gray
    let titleTextView = UITextView()
    feedbackInnerSVTitle.addArrangedSubview(titleTextView)
    titleTextView.translatesAutoresizingMaskIntoConstraints = false
    titleTextView.font = UIFont.preferredFont(forTextStyle: .body)
    titleTextView.isScrollEnabled = false
    NSLayoutConstraint.activate([
        titleLabel.widthAnchor.constraint(equalToConstant: 39)
    ])

이 코드는 영어에 대한 예상 출력을 제공하지만 다른 언어로 구현해야하므로 일정한 너비를 사용할 수 없습니다.

누구든지 내 코드를 변경하는 방법을 말해 줄 수 있으므로 상수 제약이 필요하지 않지만 레이블의 너비는 단어의 길이에 맞게 조정됩니까?

미리 감사합니다


  • 답변 # 1

    코드에서 width constraint   titleLabel 에서   titleLabel.intrinsicContentSize.width 로 설정해야합니다

    NSLayoutConstraint.activate([
       titleLabel.widthAnchor.constraint(equalToConstant: titleLabel.intrinsicContentSize.width)
    ])
    
    

    또한, distribution 를 설정  와이즈 비츠   feedbackInnerSVTitle

    .fill
    
    

  • 답변 # 2

    커플 것들 ...

    "제목 레이블"을 textView와 함께 정렬하고 싶다고 가정하고 feedbackInnerSVTitle.distribution = .fill 를 변경하십시오.   .fill 로 :

    .top
    
    

    , feedbackInnerSVTitle.alignment = .top // .fill 를 사용하지 마십시오

    .fillProportionally
    
    

    이제 각 요소가 너비의 50 %를 차지할 것이므로 feedbackInnerSVTitle.distribution = .fill // .fillProportionally 를 변경하십시오.  제목 라벨 우선 순위 :

    content hugging
    
    

    마지막으로안함으로 제목 라벨에 너비 제한을 설정하십시오.

       titleLabel.setContentHuggingPriority(.required, for: .horizontal)
    
    

    결과 :

  • 답변 # 3

    // NSLayoutConstraint.activate([ // titleLabel.widthAnchor.constraint(equalToConstant: 39) // ]) 를 사용할 수 있다고 생각합니다  콘텐츠에 따라 성장할 수 있도록

    NSLayoutConstraint.activate([ titleLabel.widthAnchor.constraint(greaterThanOrEqualToConstant: 0)]

관련 자료

  • 이전 Excel VBA - 엑셀 vba - 복사 매크로 속도
  • 다음 android - 많은 라이브러리가 원인 - javalangoutofmemoryerror