을 복구하려고 시도 파괴하여 제약 조건이(그러나 확실하지 않은 왜 나의 제약이 잘못)

0

질문

나는 사용자의 목록을 세포(컬렉션 보기 목록 cell)기반으로, 이 문서. 나는 수동으로 추가의 높이로 보기에 세포이지만,저는 경고를 아래 콘솔에서의 엑스 코드,그리고 확실하지 않은 부분을 해결할 수 있습니다.

[LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
translatesAutoresizingMaskIntoConstraints) 
    (
        "<NSAutoresizingMaskLayoutConstraint:0x281209220 h=--& v=--& liveTest.LiveChannelContentView:0x128c13430.height == 44   (active)>",
        "<NSLayoutConstraint:0x2812371b0 UIView:0x128c136b0.height == 60   (active)>",
        "<NSLayoutConstraint:0x2812372a0 V:|-(0)-[UIView:0x128c136b0]   (active, names: '|':liveTest.LiveChannelContentView:0x128c13430 )>",
        "<NSLayoutConstraint:0x2812372f0 UIView:0x128c136b0.bottom == liveTest.LiveChannelContentView:0x128c13430.bottom   (active)>"
    )
    
    Will attempt to recover by breaking constraint 
    <NSLayoutConstraint:0x2812371b0 UIView:0x128c136b0.height == 60   (active)>

아래 코드는 내가 이 오류 메시지가 표시됩니다.

class LiveChannelContentView: UIView, UIContentView {
    
    let contentsView = UIView()
    
    lazy var titleLabel: UILabel = {
        let label = UILabel()
        label.text = ""
        return label
    }()
    
    lazy var statusLabel: UILabel = {
        let label = UILabel()
        label.text = ""
        return label
    }()
    
    lazy var symbolImageView: UIImageView = {
        let imageView = UIImageView()
        imageView.contentMode = .scaleAspectFit
        return imageView
    }()
    
    var liveEvent: LiveEvent?
    
    init(configuration: LiveChannelContentConfiguration) {
          // Custom initializer implementation here.
        super.init(frame: .zero)
        
        print("this is the view height: \(self.bounds.height)") // -> I get 0.0 in here
        setupAllViews()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setupAllViews() {
        addSubview(contentsView)
        contentsView.addSubview(symbolImageView)
        contentsView.addSubview(indicator)
        contentsView.addSubview(titleLabel)
        contentsView.addSubview(statusLabel)

        contentsView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            contentsView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor),
            contentsView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor),
            contentsView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor),
            contentsView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor),
            contentsView.heightAnchor.constraint(equalToConstant: 60)
        ])
        
        contentsView.backgroundColor = .yellow
        
        symbolImageView.centerY(leading: contentsView.leadingAnchor, trailing: nil, parent: contentsView, paddingLeft: 0, paddingRight: 0, size: CGSize(width: 50, height: 50))
        indicator.centerY(leading: contentsView.leadingAnchor, trailing: nil, parent: contentsView, paddingLeft: 0, paddingRight: 0, size: CGSize(width: 50, height: 50))
        
        titleLabel.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            titleLabel.leadingAnchor.constraint(equalTo: symbolImageView.trailingAnchor, constant: 8),
            titleLabel.topAnchor.constraint(equalTo: symbolImageView.topAnchor),
            titleLabel.trailingAnchor.constraint(equalTo: contentsView.trailingAnchor)
        ])
        
        statusLabel.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            statusLabel.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor),
            statusLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor),
            statusLabel.trailingAnchor.constraint(equalTo: titleLabel.trailingAnchor)
        ])
        
        print("this is the view after setup: \(self.bounds.height)") // I also get 0.0 in here
    }
}

enter image description here

그래서,명확히하는 LiveChannelContentView 입니다,나는 추가 노란색 배경을 보기입니다. 두 가지가 있지 않다. 첫째,심지어 Xcode 말

    Will attempt to recover by breaking constraint 
    <NSLayoutConstraint:0x2812371b0 UIView:0x128c136b0.height == 60   (active)>

면 스크린샷을 찍 응용 프로그램의 측정은 노란색 배경 UIView 의 높이를,그것은 여전히 60. 나는 생각 깨 제약 조건으로 사용되고 있는 다른 높이 제약 조건을 대신의 60,그러나 그것은 잘못입니까?

다른 것은 내가 궁금했는

"<NSAutoresizingMaskLayoutConstraint:0x281209220h=--&v=--&liveTest.LiveChannelContentView:0x128c13430.높이==44(active)>" 에서 사용되는 나의 코드입니다. 검색 파일 포함 44 내 작업 영역에서 그러나 나는 아무것도 건지지 못했습니다.

정말로 확실하지 않지만,나는 생각은 높이의 44 60 에 적용되는 동일한 UIView 및 Xcode 의 60 의 높이는 앵커 또는 무언가이다. 그러나 때,나는 삭제를 높이 앵커에 대한 contentsView, contentsView.heightAnchor.constraint(equalToConstant: 60),응용 프로그램으로 추락한 다음과 같다.

enter image description here

도 삭제하기 위쪽이나 아래쪽 앵커의 contentsView 지만,그것은 또한 분쇄니다.

contentsView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor),

contentsView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor),

그래서 말해 줄 수 있는 제약해야 나를 수정하거 하는건가요?

autolayout constraints ios swift
2021-11-21 10:30:34
1

최고의 응답

1

이 부분에 변경

    contentsView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        contentsView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor),
        contentsView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor),
        contentsView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor),
        contentsView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor),
        contentsView.heightAnchor.constraint(equalToConstant: 60)
    ])

하기

contentsView.translatesAutoresizingMaskIntoConstraints = false

let con = contentsView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor)
con.priority = UILayoutPriority(rawValue: 999)  
    NSLayoutConstraint.activate([
        contentsView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor),
        contentsView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor),
        contentsView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor),
        con,
        contentsView.heightAnchor.constraint(equalToConstant: 60)
    ])
2021-11-21 10:41:33

답장을 보내 주셔서 감사합니다. 나는 그것을 시도했고 그 일을 지금입니다. 면 내가 올바른지,나는 당신의 코드를 절단 앵커의 우선순위 문제를 해결하 am I right? 또한,이번에 처음으로 이 문제를 해결,그리고 당신은 어떻게 배치할 필요가 있다는 것을 잘 알을 높이 바닥 앵커의 우선 순위가 있습니까? 설명할 수 있겠습 나를 위해 무엇입니까?
Yuuu

그것의 감소로 기본값은 1000 만들어진 모든 제약 조건 초기 셀의 높이가 44 과 충돌하는 60 에서 당신의 제약 조건는 tableview 처음에 사용되는 때까지 자동 레이아웃을 계산한 정확한 높이에 따라 셀 콘텐츠
Sh_Khan

아,이제 내가 이를 변경 bottomAnchor 의 우선 순위를 999 입니다. 또한,나는 자동 기본값 셀의 높이,44,내가 왜 필요가 우선 순위가 낮뿐만 아니라. Thank you so much!!
Yuuu

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................