2017-01-17 1 views
0

저는 UHLabels 수를 가지고 있는데, 모두 adjustsFontSizeToFitWidthtrue으로 설정되어 있습니다. 그것들은 모두 다른 크기이며, 그 안에있는 텍스트의 길이가 달라 지므로, 기본적으로 각 레이블에있는 텍스트의 크기는 임의적 일 수 있습니다.adjustsFontSizeToFitWidth를 사용하여 다른 크기의 UILabels을 만들려면 글꼴 크기가 같아야합니다.

저의 목표는 텍스트 크기를 모두 동일하게하는 것입니다. 각 레이블에서 텍스트를 맞추기 위해 크기를 결정한 후에 텍스트의 크기를 가장 작은 글꼴 크기로 조정합니다. UILabels 중. 이것은 각 레이블 텍스트가 적합 할만큼 작은 최대 글꼴 크기입니다.

각 레이블에 대해 텍스트를 맞출 수있는 가장 큰 글꼴 크기를 수동으로 계산 한 다음 각 레이블의 글꼴 크기를 글꼴 크기 중 가장 작은 것으로 수동으로 계산하는 방법도 고려했습니다. 이 계산을해라.

+0

하위 뷰를 반복 할 수 있습니까? UILabels 만 선택하고 글꼴 크기를 빼면됩니다. 그런 다음 각 레이블을 필요한 글꼴 크기로 설정하면 두 번째 반복됩니다. – dfd

+0

수동으로 계산해야 할 수도 있습니다. 방금 제안을 테스트 해 보았고 적합하게 조정 된 글꼴 크기가 UILabel.font.pointSize 값에 반영되지 않은 것 같습니다. 그들은 모두 17로 되돌아갔습니다. -/ – dfd

+0

@dfd 나는 축소 이후에 표시된 글꼴 크기가 레이블의 글꼴에 저장된 글꼴 크기와 아무런 관련이 없다는 것을 제외하고는 (그 크기가 더 크다는 것을 제외하고는) 생각합니다. 셀이 텍스트를 배치하기 전에 최종 크기를 계산하는 방법을 알고 있습니까? 이것은 내 문제를 해결할 것입니다. – BallpointBen

답변

0

레이블을 반복하여 필요한 최소 크기를 찾아야합니다. 난 그냥 표시해야하는 글꼴의 최소 크기를 찾기 위해 동일한 레이블에 문자열의 배열을 통해 반복하고있어이 코드

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 10)) 
    let textArray = ["asdasdas","asdsd","asdas"] 
    let size : CGFloat = 14 
    var minimumSize = size 
    for string in textArray{ 
     var i : CGFloat = 0 
     while size-i>0 { 
      let font = UIFont.systemFont(ofSize: size-i) 
      let preferredSize = label.preferredLabelSize(maximumFrameBounds: view.frame, font: font, text: string) 
      if label.frame.size.width>=preferredSize.width{ 
       minimumSize = min(size-i, minimumSize) 
       print(minimumSize) 
       break 
      } 
      i += 1 
     } 
     print(minimumSize) 
    } 

을 확인합니다. 이 작업이 완벽하게 작동하는지 확실하지 않지만 올바른 방향으로 알려줄 것입니다. 문자열 배열을 반복하는 대신 최소 글꼴 크기를 찾으려면 텍스트로 라벨을 반복해야합니다. 배열의 레이블 또는 문자열의 너비를 수정하여 원하는대로 작동하는지 확인할 수 있습니다. 또한 자동 레이아웃을 사용하여 글꼴 크기를 수동으로 계산하는 대신 OS가 크기를 처리하도록 할 것을 제안합니다.

+0

감사합니다. 자동 레이아웃의 문제는 라벨이 모두 동일한 크기 (중요하지만 중요하지 않음)이지만 길이가 다른 텍스트를 포함하는 경우 (중요), 텍스트의 크기가 각각 맞게 조정됩니다 그 자체가 긴 문자열은 작은 글꼴 크기를 의미합니다. 모든 레이블의 문자열이 동일한 (가장 작은) 글꼴 크기를 갖기를 바랍니다. 본질적으로, 나는 레이블의 글꼴 크기를 동일하게 유지하고 싶지만 자동 레이아웃은 그런 것을 허용하지 않는다. – BallpointBen

+0

높이/너비를 지정하지 않고 레이블을 여러 줄로 만들면 자동 레이아웃의 텍스트 크기가 조정되지 않고 레이블의 프레임 크기가 변경됩니다. 하지만 그래, 나는 당신이 모든 라벨이 같은 크기가 되길 원한다는 것을 이해한다. :) – ebby94

+0

그러나 나는 당신의 대답이 효과가 있다고 생각한다. 한 가지 질문 : 자동 레이아웃과 호환됩니까? 회전 변경시 ​​NeedsDisplay()를 설정해야합니까? 어쨌든, 나는 언젠가 그것을 시험 할 것이다. 감사. – BallpointBen