1

我刚刚开始探索 Uber iOS Sdk。我正在检查 RequestButton 并注意到它没有占用我们正在传递的任何帧。是否可以将按钮放在视图的所需位置?

let button = RequestButton(colorStyle:.White)
view.addSubview(button)
button.frame = CGRectMake(100,300, button.frame.size.width, button.frame.size.height)
4

2 回答 2

0

可以在所需位置添加 RequestButton。RequestButton 使用自动布局(或基于约束的布局)而不是基于框架的布局来定位。请参阅 Apple 关于Auto Layout 与 Frame-Based Layout的说明。

自动布局保证在框架改变方向和不同设备尺寸时调整大小。在 Auto Layout 中,您需要根据 UIView与其他视图的相对位置来放置它们。

这是一个如何将 RequestButton ( button) 居中在父 UIView ( inView)中的示例

func centerButton(forButton button: RequestButton, inView: UIView) {
        button.translatesAutoresizingMaskIntoConstraints = false

        // position constraints
        let horizontalConstraint = NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: inView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
        let verticalConstraint = NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: inView, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)

        // add constraints to view
        inView.addConstraints([horizontalConstraint, verticalConstraint])
    }
于 2015-12-25T18:00:11.107 回答
0

可能有一种更简单的方法,但我发现这个解决方案可以使用基于框架的布局来定位 Uber RequestButton。

将请求按钮放在包装器 UIView 中。通过Christine Kim的回答设置包装视图的约束。然后您可以定位包装器的框架,RequestButton 将随之移动

// MyView.swift
let uber = RequestButton()
let uberWrapper = UIView()

uberWrapper.addSubview(uber)
self.addSubview(uberWrapper)

//Set constraints
let horizontalConstraint = NSLayoutConstraint(item: uber, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: uberWrapper, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
let verticalConstraint = NSLayoutConstraint(item: uber, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: uberWrapper, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)

// add constraints to view
uberWrapper.addConstraints([horizontalConstraint, verticalConstraint])

//layoutSubviews()
//set your origin
uberWrapper.frame = CGRect(origin: CGPointMake(0, 0), size: uber.intrinsicContentSize()) 
于 2016-02-26T14:15:51.447 回答