2014-06-09 5 views
0

위 예제를 통해 iOS7을 사용하여 UITextView 내부에 입력 할 때 줄 간격/단락 간격을 어떻게 얻을 수 있는지 이해할 수있었습니다. 그러나 문제가 있습니다. 아직 TextKit에 대해 배우면서 다른 사람이 문제 해결에 도움을 줄 수 있기를 바랍니다. 이 프로젝트는 내가 http://1drv.ms/1o8Rpd2iOS7 줄 간격이있는 UITextView에 입력하고 TextKit을 사용하여 서식을 유지하십시오.

2입니다 -이 문제의 비디오는

1입니다 - :

이것은 내가 2 개 파일을 첨부 https://github.com/downie/DoubleSpacedTextView

실제 예입니다 오전 시험 : http://1drv.ms/1o8RtK0

문제는 텍스트 줄 사이에 빈 줄이있는 경우입니다 t 2 빈 줄) 및 빈 줄 안쪽을 클릭하여 UITextView를 활성화하고 키보드를 표시하면 텍스트가 위로 이동하거나 서식이 손실됩니다.

나는 원래 약간 수정 된 핵심 기능이며, 당신이 UITextView 내에서 처음 클릭 할 때 완벽하게는 아니지만 서식이 작동 않습니다 -

- (void) formatText 
{ 
     __block CGFloat topOffset = 0; 

     NSRange lineGlyphRange = [self.layoutManager glyphRangeForTextContainer:self.textContainer]; 

     [self.layoutManager 
     enumerateLineFragmentsForGlyphRange:lineGlyphRange usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *textContainer, NSRange glyphRange, BOOL *stop) 
     { 
      CGRect adjustedRect = rect; 
      CGRect adjustedUsedRect = usedRect; 
      adjustedRect.origin.y = topOffset; 
      adjustedUsedRect.origin.y = topOffset; 

      [self.layoutManager setLineFragmentRect:adjustedRect forGlyphRange:glyphRange usedRect:adjustedUsedRect]; 

      topOffset += 30; // 30 is the space between the lines you can adjust this as you like 
     }]; 

     CGRect adjustedExtraLineFragmentRect = self.layoutManager.extraLineFragmentRect; 
     CGRect adjustedExtraLineFragmentUsedRect = self.layoutManager.extraLineFragmentUsedRect; 
     adjustedExtraLineFragmentRect.origin.y = topOffset; 
     adjustedExtraLineFragmentUsedRect.origin.y = topOffset; 

     [self.layoutManager setExtraLineFragmentRect:adjustedExtraLineFragmentRect usedRect:adjustedExtraLineFragmentUsedRect textContainer:self.textContainer]; 
} 

당신이 있는지 확인하십시오 수를 우리는 이것을 막을 수 있습니까? 그래서 우리가 UITextView에 입력 할 때 텍스트는 항상 형식화됩니다.

TextKit 또는 attributed Text?를 사용하여 UITextView에 형식이 지정된 텍스트 (줄 간격 포함)를 입력하는 방법을 보여주는 다른 예제가 있습니까?

저는 iOS6 이후이 문제로 고심하고 있습니다.

감사합니다,

+0

문제가 명확하지 않은 경우 알려 주시면 문제의 이미지 또는 비디오를 만들려고합니다. 감사합니다. – Will

+0

문제점에 대한 비디오와 문제점을 테스트 할 프로젝트를 추가했습니다. 감사합니다 – Will

답변

1

I 전체 솔루션, 솔루션을 찾아 어디에 단지 생각이없는 것이다.

모든 레이아웃 코드는 UITextView의 textChange 이벤트를 시작합니다. 커서를 움직이면 해당 텍스트의 내용이 변경되지 않으므로 해당 코드가 호출되지 않습니다. 그러나 textViewDidChangeSelection에 첨부해도 문제가 해결되지는 않습니다.

나는 두 가지 중 하나가 될 수있다 생각 해요 :

  • 가 NSLayoutManager 텍스트와 라인 다르게 빈 줄을 처리한다. 이것은 TextKit 버그이거나, 그냥 호출되지 않는 많은 델리게이트/메소드 중 하나입니다.
  • 공백 행에 rect 수학에 관한 문제가 있습니다. 라인이 공백인지 아닌지에 대한 중요한 차이점은 lineFragmentRect의 usedRect가 너비 0이지만 어쩌면 높이가 0이거나 오프셋이 잘못되어 계산이 엉망이라고 생각합니다. 나는 그것이 실제로 무엇을 일으키는 지 보지 못한다.
+0

크리스. 잘하면 문제를 해결하기 위해 발견 될 수있는 해결 방법이나 해결 방법이 있습니다.빈 줄을 알아낼 수있는 방법이 있는지, 텍스트가 렌더링 된 후에 제거되는 임시 문자를 쓰는지 궁금합니다. – Will