Программная автоматическая разметка библиотеки материалов CosmicMind Swift со сложенным меню

Я использую библиотеку материалов CosmicMind для Swift. Я пытаюсь получить Menu пример работы с программной автопрокладкой - где я могу найти пример того, как сделать эту работу?

Из примеров на Github я не нашел способ использовать автопоставку.

/// Prepares the FlatMenu example.
private func prepareFlatbMenuExample() {
    let btn1: FlatButton = FlatButton()
    btn1.addTarget(self, action: "handleFlatMenu", forControlEvents: .TouchUpInside)
    btn1.setTitleColor(MaterialColor.white, forState: .Normal)
    btn1.backgroundColor = MaterialColor.blue.accent3
    btn1.pulseColor = MaterialColor.white
    btn1.setTitle("Sweet", forState: .Normal)
    view.addSubview(btn1)

    let btn2: FlatButton = FlatButton()
    btn2.setTitleColor(MaterialColor.blue.accent3, forState: .Normal)
    btn2.borderColor = MaterialColor.blue.accent3
    btn2.pulseColor = MaterialColor.blue.accent3
    btn2.borderWidth = .Border1
    btn2.setTitle("Good", forState: .Normal)
    view.addSubview(btn2)

    let btn3: FlatButton = FlatButton()
    btn3.setTitleColor(MaterialColor.blue.accent3, forState: .Normal)
    btn3.borderColor = MaterialColor.blue.accent3
    btn3.pulseColor = MaterialColor.blue.accent3
    btn3.borderWidth = .Border1
    btn3.setTitle("Nice", forState: .Normal)
    view.addSubview(btn3)

    // Initialize the menu and setup the configuration options.
    flatMenu = Menu(origin: CGPointMake(spacing, view.bounds.height - height - spacing))
    flatMenu.direction = .Down
    flatMenu.spacing = 8
    flatMenu.buttonSize = CGSizeMake(120, height)
    flatMenu.buttons = [btn1, btn2, btn3]
}

flatMenu имеет тип Menu из библиотеки материалов и является классом, который содержит каждую из кнопок в меню. Похоже, "происхождение" - это то, что контролирует позиционирование на странице, но потому что Menu не подкласс UIView, я не уверен, как использовать это с autolayout.

public class Menu {
...
}

1 ответ

Решение

В каком виде у вас есть кнопки? Попробуйте позиционировать суперпредставление с помощью AutoLayout, используя те же размеры, что и размер кнопки, а затем установите источник меню как CGRectZero.

Также убедитесь, что у clipsToBounds для superview установлено значение false (по умолчанию). А поскольку кнопки находятся за пределами вашего вида с размещенной автолайтингом, вам нужно будет использовать собственный подкласс UIView, такой как приведенный ниже, для обработки действий над кнопками.

class MenuParentView: UIView {

  override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {

    //because the subviews will be outside the bounds of this view
    //we need to look at the subviews to see if we have a hit
    for subview in self.subviews {
        let pointForTargetView = subview.convertPoint(point, fromView: self)
        if CGRectContainsPoint(subview.bounds, pointForTargetView) {
            return subview.hitTest(pointForTargetView, withEvent: event)
        }
    }

    return super.hitTest(point, withEvent: event)
  }
}
Другие вопросы по тегам