>

UITableViewController 에 일종의 오버레이 메뉴를 추가하려고합니다. . 첫 번째 목표는 화면 하단에 매우 불규칙한 컨트롤러에 배경보기를 표시하는 것입니다. 바 버튼의 콜백에서 다음 코드를 사용하여 프로그래밍 방식 으로이 작업을 수행하고 있습니다. 즉, 원래 레이아웃이 발생한 후 호출됩니다.

   print("self.tableView.frame=\(self.tableView.frame)")
    let settingsView = UIView()
    settingsView.translatesAutoresizingMaskIntoConstraints = false
    settingsView.backgroundColor = UIColor.cyan.withAlphaComponent(0.5)
    self.view.addSubview(settingsView)
    self.view.addConstraints([
        NSLayoutConstraint(item: settingsView, attribute: .bottom, relatedBy: .equal, toItem: self.tableView, attribute: .bottom, multiplier: 1, constant: 50),
        NSLayoutConstraint(item: settingsView, attribute: .leading, relatedBy: .equal, toItem: self.tableView, attribute: .leading, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: settingsView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: self.view.frame.width),
        //NSLayoutConstraint(item: settingsView, attribute: .trailing, relatedBy: .equal, toItem: self.tableView, attribute: .trailing, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: settingsView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 100)
        ])
    self.view.setNeedsLayout()

그러나 결과가 예상 한 것처럼 보이지 않습니다 : 화면 하단에있는 대신 내 화면 하단이 실제로 상단 여백과 정렬됩니다 (따라서 50  찌그러짐을 확인하려면 첨부 된 그림의 탐색 막대를 통해 청록색을 볼 수 있습니다. 왜 그런 겁니까? 하단 대신 상단을 정렬하도록 첫 번째 제약 조건을 변경하면 정상적으로 작동합니다 (물론 상단).

또한, 네 번째 제약 조건 (주석을 달아서 뷰의 오른쪽 가장자리를 화면의 오른쪽 가장자리와 정렬해야 함)을 세 번째 제약 조건으로 바꾸어야한다는 것에 놀랐습니다. 너비, 그러나 어떻게 든 덜 깨끗해 보입니다). 네 번째 것을 사용하면보기가 완전히 사라집니다 (너비가 0이라고 생각합니다). 그 이유가 무엇입니까?

와이즈 비즈  처음에 명령은 print 를 보장합니다  크기가 적당합니다 :

tableView

모든 것이 사소한 것처럼 보이므로 여기에 보이지 않는 것이 있습니다 ...

self.tableView.frame=(0.0, 0.0, 375.0, 667.0)

  • 답변 # 1

    여기서 문제는 정말 UITableView(Controller) 인 것 같습니다 이러한 제약 조건은 일반적인 UIView(Controller) 에서 잘 작동하기 때문에 . 와이즈 비즈  그 주위에는 역할이 없습니다. 어떤 이유로 UINavigationController 처럼 보입니다.  그리고 .bottom  앵커는 테이블보기에서 사용할 수 없습니다. 누군가 이유를 알고 있거나 방법을 설명 할 수있는 경우 수행하십시오!

    어쨌든, 나는 뷰의 실제 측정을 사용하여 문제를 해결했습니다. 첫 번째 제약 조건은 다음과 같습니다.

    .trailing
    
    

    이것은 화면 하단에보기를 멋지게 가져옵니다. 와이즈 비즈  상수는 화면 상단에 탐색 모음이있는 것을 설명합니다. 여전히 다른 버전이 작동하지 않는 이유를 이해하지 못하기 때문에 여전히 "해킹"과 같은 느낌이 듭니다.

    NSLayoutConstraint(item: settingsView, attribute: .bottom, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: self.view.frame.height + self.view.bounds.minY)

  • 이전 브라우저 페치가 작동하지만 AngularJS $http 서비스에 CORS 오류가 있습니다
  • 다음 python - 같은 이름의 모듈 가져 오기