Ужасно выглядящий текст при привлечении NSAttributedString в CGContext

Чтобы не скрывать запись под клавиатурой, самое простое решение, которое я нашел, это использовать вид прокрутки, как в примере:

<ContentView>
    <ScrollView Margin="0, 5">
        <StackLayout Margin="40, 5" Spacing="10">
            <Entry Text="{Binding TextEntry1}" Placeholder="Text entry 1"/>
            <Entry Text="{Binding TextEntry2}" Placeholder="Text entry 2"/>
            <Entry Text="{Binding TextEntry3}" Placeholder="Text entry 3"/>
        </StackLayout>
    </ScrollView>
</ContentView>
10
задан Glorfindel 9 March 2019 в 14:01
поделиться

1 ответ

Я отвечаю на это, потому что архивы coretext-dev не доступны для поиска, и Aki Inoue от Apple просто ответил на мой вопрос:

Так как CALayer не может представить субпиксельный цвет (иначе сглаживание шрифта), необходимо отключить его. Я полагаю, что CATextLayer делает это по умолчанию.

Сделайте CGContextSetShouldSmoothFonts (контекст, ложь).

Спасибо, Aki!

Другой комментарий Milen Dzhumerov:

Я не полагаю, что это точно. Мы вовлекаем текст в CALayers с субпиксельным сглаживанием. Просто необходимо удостовериться, что Вы потянули позади текста прежде, чем нарисовать сам текст. См. http://www.cocoabuilder.com/archive/message/cocoa/2008/3/28/202581 для ссылок.

Milen корректен, в случае, если Вы знаете цвет фона заранее, можно сделать:

CGContextSetRGBFillColor(ctx, r, g, b, a)
CGContextFillRect(ctx, (topLeft, size))
CGContextSetShouldSmoothFonts(ctx, True)

И Вы добираетесь, симпатичный субпиксель сгладил текст. Однако, если Вы не знаете цвета фона, необходимо выключить сглаживание шрифта, или Вы получите искаженные результаты.

16
ответ дан 3 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: