我正在创建处于不同超级视图中的UIView,但是我想将框架设置为彼此相等。
这是我到目前为止尝试过的
let globalPoint = self.view.convert(drawButton.frame.origin, to: nil)
let frame = CGRect(x: globalPoint.x, y: globalPoint.y, width: self.drawButton.frame.width, height: self.drawButton.frame.height)
subViewOfInnerUIView.frame = frame
但是我的观点最终看起来像这样
使用您提供的对象名称,这里是一个示例,该示例创建第二个视图,也就是UIButton(subViewOfInnerUIView),它将与第一个按钮(drawButton)具有相同的框架。这两个按钮都是主视图中不同超级视图的子视图。我使用了UIButton,因此可以标记视图,但是可以设置框架的UIView的任何其他子类也可以使用。
请注意,由于它们具有相同的框架,除了具有相同的大小,它们相对于其父视图也具有相同的位置。
即使所讨论的对象位于几层深或浅的子视图中,这也应该起作用。没关系。
可以在最新的XCode的单视图操场上重新创建示例。希望这会有所帮助!
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let view = UIView()
view.backgroundColor = .white
self.view = view
let subView1 = UIView(frame: CGRect(x: 40, y: 250, width: 300, height: 300))
subView1.backgroundColor = .red
view.addSubview(subView1)
let subView2 = UIView(frame: CGRect(x: 20, y: 50, width: 340, height: 100))
subView2.backgroundColor = .green
view.addSubview(subView2)
let drawButton = UIButton(frame: CGRect(x: subView1.frame.width / 2 - 50, y: 25, width: 150, height: 50))
drawButton.backgroundColor = .blue
drawButton.setTitle("DRAW BTN", for: .normal)
subView1.addSubview(drawButton)
let subViewOfInnerUIView = UIButton()
subViewOfInnerUIView.setTitle("DRAW BTN2", for: .normal)
subViewOfInnerUIView.backgroundColor = .brown
subView2.addSubview(subViewOfInnerUIView)
let frame = view.convert(drawButton.frame, to: nil)
subViewOfInnerUIView.frame = frame
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()