Подтвердить что ты не робот

Как создать ширину линии в 0,5 пикселя

в iOS 7 линия разделителя таблицы выглядит тоньше, чем предыдущие ios, и она похожа на ширину в 0,5 px.

Мне нужно разделить ячейку в 2 с аналогичной разделительной линией (только по вертикали), и я хочу, чтобы эта строка была такой же, как и строка регулярного разделителя.

Итак, мне интересно, как лучше всего добавить такую ​​линию?

Если я использую UIView и устанавливаю его ширину в 0.5, он не будет виден, и если я установил его ширину в 1.0, то, конечно, я получу ширину строки 1.0px не 0.5px.

Я попытался использовать ресурс с размером сетчатки 1.0px, но он не сработал...

4b9b3361

Ответ 1

Вы устанавливаете ширину как 0,5 - или для того, чтобы сделать ее всегда 1 пиксель, затем установите ее на (1.0 / [UIScreen mainScreen].scale)

Я сделал это раньше, и он отлично работал

Я думаю, что причина, по которой вы не видите этого, заключается в том, что вы центрируете линию точно в середине экрана, что приведет к возникновению линии (320 - 0.5)/2.0, являющейся началом X 159.75 - 0.75 может быть запутанным - или ячейка удаляет цвет фона вашего представления

Ответ 2

Я сделал следующие шаги:

  • Создать ограничение с высотой 1px
  • Соединить ограничение с IBOutlet (файл .m)
  • Измените константу ограничения на 0,5 в ViewDidLoad

Это работает для меня.

Ответ 3

Предполагая, что вы выполняете компоновку своей ячейки с помощью раскадровки:

Поместите UIView с нужной высотой и шириной 1px в ячейку. Дайте ему любой цвет фона, который вам понравится. Стандартный цвет разделителя составляет ок. RGB (200199204).

Затем создайте подкласс UIView, например. HairlineView и переопределить awakeFromNib()

-(void)awakeFromNib {
    self.layer.borderColor = [self.backgroundColor CGColor];
    self.layer.borderWidth = (1.0 / [UIScreen mainScreen].scale) / 2;

    self.backgroundColor = [UIColor clearColor];
}

Вы рисуете рамку вокруг вашего широкоэкранного представления шириной 1 пиксель, что составляет 2 * 0,25 пикселя, что составляет всего 0,5 пикселя, что является той шириной, которую вы хотели достичь, а затем скрыть фон представления, установив фон на Чисто. Этот последний шаг важен, он не будет работать.

Задайте тип вашего вида для HairlineView, тогда он должен работать.

При программировании вы должны переопределить другой метод, например. initWithFrame() возможно, так как awakeFromNib() вызывается только при создании представления из макета раскадровки.

Ответ 4

Некоторые из приведенных выше ответов уже правильны, но просто обновление: в Xcode 8, теперь вы можете установить константу ограничения макета с десятичным числом. Больше не нужно подключать IBOutlet или устанавливать константу через атрибуты времени выполнения, определенные пользователем.

Десятичная константа

Ответ 5

Вы можете установить константу ограничения макета с десятичным числом, но у UIBuilder есть некоторая ошибка в Xcode 8,9,10

Мое решение:

  1. Открыть файл xib по исходному коду enter image description here]
  2. Найдите свою константу ограничения макета и измените на 0,5 enter image description here

Ответ 6

вы можете установить ограничение в раскадровке height 0.5f; он не будет отображаться напрямую, однако он отображается под списком ограничений, как показано на снимке экрана enter image description here

Ответ 7

Вы можете использовать Core Graphics для рисования градиента:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 1.0f)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil];
[view.layer insertSublayer:gradient atIndex:0];

Ответ 8

мое решение:

  • создайте представление, установите ограничение на представление: height = 0px, перейдите в "Identity Inspector" и измените приоритет этого ограничения на 750.

  • затем выберите представление и нажмите кнопку "pin", добавьте еще одно ограничение для этого представления: "height = 0.5" с приоритетом 1000. В "Identity Inspector" вы можете увидеть, что второе ограничение автоматически становится "высотa >= 0,5"

работает в Xcode 7.3.1

Ответ 9

Вы помещаете представление в ячейку внизу. и установите его темный цвет представления. а также установить его высоту 0,5 PX. вы можете получить разделитель каждой ячейки в it.keep его ширину в соответствии с шириной ячейки.

Ответ 10

вместо того, чтобы пытаться установить высоту вашего представления в соответствии с стилем разделителя. Удалите разделитель. установите стиль разделителя ячеек в StyleNone.
Затем добавьте два вида с высотой .5 или 1 пикселя в середине и снизу ячейки. Теперь он выглядит одинаково и имеет стиль разделителя.

Ответ 11

Трудный способ:

  • В раскадровке или xib установите уникальное значение (например, 123) для ограничения высоты строки
  • Откройте раскадровку или xib с помощью текстового редактора
  • Замените уникальное значение (например, 123) на 0,5

Ответ 12

Я использую этот класс для рисования 1 пиксельной линии (не 1 точки, а одного пикселя).

class HairlineView: UIView {
    override func awakeFromNib() {
        super.awakeFromNib()

        for constraint in self.constraints {
            if let _ = constraint.firstItem as? HairlineView,
               constraint.firstAttribute == .height,
               constraint.firstAnchor.isKind(of: NSLayoutDimension.self),
               constraint.secondItem == nil,
               constraint.secondAnchor == nil {
                constraint.constant = (1.0 / UIScreen.main.scale)
                return
            }
        }
    }
}

Для этого необходимо иметь UIView с ограничением высоты. Код просматривает существующие ограничения для вида, находит ограничение высоты и устанавливает его значение в your_desired_height в пикселях (не путайте с точками).

Код можно легко изменить на любое значение, заменив your_desired_height на любое значение, которое вам нужно.

Ответ 13

Вы можете решить эту проблему следующим образом в Xcode 8/iOS 10 без использования ограничений:

  • Добавьте UIView в свою раскадровку с помощью Interface Builder. Задайте свойства для этого, как вы сочтете нужным, просто для визуального представления того, как он будет выглядеть в вашей ячейке (т.е. Height = 44, width = 1). В этот момент не имеет значения, больше ли ширина, чем та, которая вам нужна (т.е. 0,5).

  • Создайте IBOutlet для этого представления в вашем контроллере представления (т.е. UIView * splitLine).

  • В viewWillAppear: метод вашего контроллера представления добавляет следующий метод:

[self.splitLine setFrame: CGRectMake (x, y, 0.5, 44)];

В этом методе вы указываете ширину разделительной линии на 0,5, а высота - на любые значения, которые вы хотите. Эти значения переписывают значения, указанные в раскадровке.