Я нашел несколько ссылок на эту ошибку через Google, но все обходили ее, играя с размерами шрифтов. После большой охоты я обнаружил этот поток , в котором говорится, что сглаживание применяется, когда кадр представления содержит дробные значения пикселей, например если вы рассчитываете его размер как часть супер просмотра.
Конечно, приведение значений CGRect
к int
для кадра представления работало отлично. Например, если вы хотите, чтобы ваше текстовое поле было центрировано вертикально в суперпредставлении, вы должны использовать int
приведение типа этого:
textFieldWidth = 300;
textFieldHeight = 31;
offsetX = 0;
offsetY = (superview.bounds.size.height - textFieldHeight) / 2;
textField.frame = CGRectMake((int) offsetX,
(int) offsetY,
(int) textFieldWidth,
(int) textFieldHeight);
Существует также функция CGRectIntegral
, которую можно использовать для преобразования CGRect
в целочисленные значения.