Ios 在RTL属性文本中点击LTR文本时,NSLayoutManager返回错误的字符索引

Ios 在RTL属性文本中点击LTR文本时,NSLayoutManager返回错误的字符索引,ios,xamarin,xamarin.ios,uilabel,nslayoutmanager,Ios,Xamarin,Xamarin.ios,Uilabel,Nslayoutmanager,我编写代码来检测用户是否在UILabel中的特定范围内点击。它似乎在大多数情况下都有效,但我注意到点击属性文本的最后一行会产生不一致的结果 public static bool DidTapRange(this UITapGestureRecognizer recognizer, UILabel label, NSRange range) { using (var ts = new NSTextStorage()) { var lm = new NSLayoutM

我编写代码来检测用户是否在
UILabel
中的特定范围内点击。它似乎在大多数情况下都有效,但我注意到点击属性文本的最后一行会产生不一致的结果

public static bool DidTapRange(this UITapGestureRecognizer recognizer, UILabel label, NSRange range)
{
    using (var ts = new NSTextStorage())
    {
        var lm = new NSLayoutManager();
        var tc = new NSTextContainer(new CGSize(label.Frame.Width, double.MaxValue));

        lm.AddTextContainer(tc);
        ts.Append(label.AttributedText);
        ts.AddLayoutManager(lm);

        tc.LineFragmentPadding = (float) 0.0;
        tc.LineBreakMode = label.LineBreakMode;
        tc.MaximumNumberOfLines = (uint) label.Lines;
        tc.Size = label.Bounds.Size;

        var index = lm.GetCharacterIndex(recognizer.LocationOfTouch(0, label), tc); 
        return (nint)index >= range.Location && (nint)index < range.Location + range.Length;
     }
}
public static bool DidTapRange(此UITapgestureRecognitor识别器、UILabel标签、NSRange范围)
{
使用(var ts=new NSTextStorage())
{
var lm=新的NSLayoutManager();
var tc=新的NSTextContainer(新的CGSize(label.Frame.Width,double.MaxValue));
lm.AddTextContainer(tc);
ts.Append(label.attributeText);
ts.AddLayoutManager(lm);
tc.LineFragmentPadding=(float)0.0;
tc.LineBreakMode=label.LineBreakMode;
tc.MaximumNumberOfLines=(uint)标签行;
tc.Size=label.Bounds.Size;
var指数=lm.GetCharacterIndex(识别器.触摸位置(0,标签),tc);
返回(nint)索引>=范围.位置和(nint)索引<范围.位置+范围.长度;
}
}
我在RTL文本和LTR文本混合使用时特别有问题。例如,如果我将LTR文本附加到RTL文本的末尾并点击它(在下面的案例中
TapMe
),上述代码将返回不正确的字符索引,并为范围检查返回false

ع‪يتكلّم ‬ ، فهو يتحدّث بلغة يونيكود. تسجّل الآن 统一码会议 في 10-12 آذار 1997 بمدينة مَايِنْتْس، ألمانيا. و سيجمع المؤتمر بين خبراء من كافة قطاعات الصناعة على الشبكة العالمية انترنيت ويونيكود، حيث ستتم، على الصعيدين الدولي والمحلي على حد سواء مناقشة سبل استخدام يونكود في النظم القائمة وفيما يخص التطبيقات الحاسوبية، الخطوط، تصميم 㶪㶪㶪㶪㶫㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪㶪15786


这可能是什么原因

它在纯RTL或LTR字符串中工作吗?这似乎是iOS中的本地化问题。你最好共享一个示例,这样我就可以在我这边测试它。复制如下:如果你点击每行的开头和结尾,字符索引将是正确的,但如果你点击最后一行,它将是不正确的。请注意,最后一行有很多空格,这可能会导致问题。我在DEV中使用这段代码已有几个月了,但只在LTR字符串中使用,在开始测试RTL之前,我从未看到过问题。这使我无法将所有东西投入生产:(这似乎是一个本地化问题。你可以将其发布到github。那么你认为这是Xamarin Forms问题还是Xamarin.iOS问题?它在纯RTL或LTR字符串中工作吗?这似乎是iOS中的本地化问题。你最好共享一个示例,这样我就可以在我这边测试它了。下面是复制:如果你点击每个l的开始和结束请注意,最后一行有很多空格,这可能会导致问题。我在DEV中使用此代码已有几个月了,但仅限于LTR字符串,在开始测试RTL之前,我从未看到过问题。这阻止了我将所有内容都推到prod引申:(这似乎是一个本地化问题。你可以将其发布到github。那么你认为这是Xamarin表单问题还是Xamarin.iOS问题?