在UITextKit中,英文字符的顶部未与其顶部对齐

时间:2017-02-12 07:29:59

标签: ios swift

配置系统文本:

async.each(posts, function(item, callback) {
      if (isVideo(item.data.url)) {
        eroJson.push(getAlbumId(item.data.url));
      }
      callback();  // this callback is for informing that i am done processing one item in array.
  },    
  function(err) {
      //this function will be invoked when the callback() in the above body was called maximum time(e.g posts.length times)
      console.log("Callback function works");
      if(err) console.log(err);
  });

获得路径:

func prepareTextSystem()  {

    textStorage.addLayoutManager(layoutManager)
    layoutManager.addTextContainer(textContainer)
    layoutManager.delegate = self
    textContainer.lineFragmentPadding = 0
    textContainer.lineBreakMode = lineBreakMode
    textContainer.maximumNumberOfLines = numberOfLines
}

绘制:

   let glyphaRect = layoutManager.boundingRect(forGlyphRange: glyphRange, in: textContainer!)

    let glyphPosition = layoutManager.location(forGlyphAt: index)
    let lineUsedRect = layoutManager.lineFragmentUsedRect(forGlyphAt: index, effectiveRange: nil)
    let pointY = lineUsedRect.origin.y + glyphPosition.y

    if index == 0 {
        firstCharPath = UIBezierPath(rect: glyphaRect)//the first char Rect

        lineUsedRectPath = UIBezierPath(rect: lineUsedRect)//the whole lineUsedRect
        baseLinePath = UIBezierPath()//Baseline
        baseLinePath?.move(to: CGPoint.init(x: 0, y: pointY))
        baseLinePath?.addLine(to: CGPoint.init(x: Screen_W, y: pointY))
        setNeedsDisplay()
    }

如果textStorage存储字符串" Ye" ,代表如下: enter image description here

如果textStorage存储字符串"有y"(第一个字符是中文字符),则表示如下: enter image description here

问题:

  1. 为什么英文字符的顶部不与线条对齐,但是汉字的顶部是否排列好?
  2. 2.我怎样才能获得英文角色的最高职位?

2 个答案:

答案 0 :(得分:0)

它没有与顶部对齐,因为有些字符可能更高。以防万一:

YY

答案 1 :(得分:0)

两种情况下的对齐都是正确的。同样的。

汉字很好地(上方和下方)使用了所有空间,并且看起来与顶部对齐。

对于英文字符,仅使用空间的一部分。在它上面还有额外的空间用于特殊阅读标志。我们与顶部保持一致。

考虑下划线_符号。那里面有很多白色空间,但几乎没有。

Æ已经很高了。为Å顶部的小点保留的空间正在引起您的问题。