Увеличение frame.origin.x против постоянной - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь понять, как работает iOS frame and bounds. Я помещаю subView: UIView на UIViewController и кнопку, которая может увеличить координату источника кадра subView и изменить текстовую метку на ее значение.

как это,

let subView: UIView = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(subView)
    subView.backgroundColor = .blue
}


@IBAction func btnMoveBottomView(_ sender: Any) {  
    subView.frame.origin.y = subView.frame.origin.y + 100
    lbFrameInfo.text = String(format:"sub = (%.1f, %.1f)", subView.frame.origin.x, subView.frame.origin.y)
    self.view.setNeedsLayout()
    self.view.layoutIfNeeded()
}

После того, как я сделаю это действие, ясм. subView, но текст не меняется.

на консоли отладки. Я вижу, что это изменение

po subView.frame.origin
▿ (50.0, 2350.0)
  - x : 50.0
  - y : 2350.0

updateViewConstraints также было вызвано.

override func updateViewConstraints() {
    print("updateViewConstraints")
    super.updateViewConstraints()
}

ВместоТаким образом, увеличивая frame.origin.x, увеличивая значение ведущей константы, можно работать отлично.

Было бы полезно, если бы кто-нибудь смог мне объяснить различия между ними и концепцией фрейма и если это связано с автоматическим макетомвещи

1 Ответ

0 голосов
/ 14 октября 2019

Согласно вашему вопросу, вы добавили subView в представление ViewController, поэтому, когда вы создаете представление

 let subView: UIView = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))

и делаете это

 view.addSubview(subView)

, это означает, что ваше подпредставление будет на 50 позиции. вниз и влево от экрана. поэтому, когда вы сделаете это.

 subView.frame.origin.y = subView.frame.origin.y + 100

, это сместит ваш кадр дальше вниз по экрану, когда вы меняете позицию y кадра, которая является начальной позицией создания вашего представления на экране.

В самом простом виде границы представления относятся к его координатам относительно его собственного представления (как если бы остальная часть вашей иерархии представления не существовала), тогда как его frame относится к его координатам относительно родительского представления . Рамка будет отражать позицию в представлении родителей. Это означает несколько вещей:

1.Если вы создаете представление в X: 0, Y: 0, ширине: 100, высоте: 100, его рамка и границы совпадают.

2. Если вы переместите это представление в X: 100, его рамка будет отражать это изменение, но его границы не будут. Помните, что границы относятся к собственному пространству представления, и внутренне к представлению ничего не изменилось.

3. Если вы преобразуете представление, например, поворачиваете его или масштабируете его, рамка изменится, чтобы отразить это, но границы все равно не изменятся - с точки зрения внутреннего взгляда, оно не изменилось

надеюсь, что оно прояснит ваши сомнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...