Я пытаюсь выровнять компоненты моей ячейки, но она не работает должным образом.Я полагаю, я просто не понимаю некоторые простые идеи, лежащие в основе ASLayoutSpec, поэтому я был бы признателен за любую помощь здесь.
У меня есть ячейка (ASCellNode, конечно), которая состоит из ASTextNode (asTextLabel
),ASDisplayNode (asBackView
, это просто фон для textLabel с закругленными углами), а asImageNode (asSoundIcon
).
asBackView
должен быть немного выше и шире, чем asTextLabel
(работает),и asSoundIcon
должен быть справа от asBackView
(например, 4 точки между правой стороной asBackView
и левой стороной asSoundIcon
), и он должен быть вертикально центрирован.
У меня есть asSoundIcon
, который не центрирован по вертикали, и он намного дальше вправо, который я хотел.
Я перепробовал много вариантов, это только один из них, и я неЯ не понимаю, почему мой горизонтальный интервал не работает и как выровнять по вертикали asSoundIcon
.
override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
asSoundIcon.style.preferredSize = CGSize(width: 16, height: 16)
asSoundIcon.style.maxSize = CGSize(width: 16, height: 16)
asSoundIcon.style.minSize = CGSize(width: 16, height: 16)
asBackView.style.minSize = CGSize(width: 30, height: 48)
asTextLabel.style.minSize = CGSize(width: 30, height: 15)
asTextLabel.style.maxWidth = ASDimension(unit: .points, value: screenWidth - 50)
let asBackViewLayout = ASInsetLayoutSpec(insets: UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 24), child: self.asBackView)
let asTextLabelLayout = ASInsetLayoutSpec(insets: UIEdgeInsets(top: 6, left: 12, bottom: 6, right: 36), child: asTextLabel)
let asNewCenterTextLabelLayout = ASCenterLayoutSpec(horizontalPosition: .start, verticalPosition: .center, sizingOption: .minimumWidth, child: asTextLabelLayout)
let asOverlayLayout = ASOverlayLayoutSpec(child: asNewCenterTextLabelLayout, overlay: asBackViewLayout)
let asSoundVerticalLayout = ASRelativeLayoutSpec(horizontalPosition: .start, verticalPosition: .center, sizingOption: .minimumSize, child: asSoundIcon)
let asSoundLayout = ASStackLayoutSpec(direction: .horizontal, spacing: 0.0, justifyContent: .start, alignItems: .start, flexWrap: .noWrap, alignContent: .start, lineSpacing: 0.0, children: [asOverlayLayout, asSoundVerticalLayout])
return asSoundLayout
}