NSLayoutConstraint — два элемента, одна строка, приоритет интервалов

У меня есть две метки на одной строке. Мне нужно, чтобы вторая метка находилась вплотную к концу первой метки, но мне нужно убедиться, что вторая метка никогда не выходит за край экрана.

Таким образом, у меня есть левая привязка label1, выровненная слева от представления контейнера, и у меня есть левая привязка label2, ограниченная справа от label1, и правая привязка label2, ограниченная справа от контейнера.

Я хочу, чтобы label1 занимал ровно столько места, сколько ему нужно, а label2 занимал все остальное пространство. У меня ровно наоборот.

Так что мне нужна полная противоположность тому, что у меня есть здесь. Как мне это сделать?

Отвечает ли это на ваш вопрос? Автоматический макет для динамического изменения ширины этикетки

Roman Podymov 24.12.2020 16:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
277
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предоставление левой метке более высокого приоритета охвата контента должно помочь.

// In code
leftLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)

Для дальнейшего чтения по этой теме я нашел это очень полезным

Пример детской площадки

//: A UIKit based Playground for presenting user interface
  
import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {
    
    override func loadView() {
        let view = UIView()
        view.backgroundColor = .white

        let leftLabel = UILabel()
        leftLabel.text = "I am left"
        leftLabel.backgroundColor = .orange
        leftLabel.translatesAutoresizingMaskIntoConstraints = false
        
        let rightLabel = UILabel()
        rightLabel.text = "I am right"
        rightLabel.backgroundColor = .yellow
        rightLabel.translatesAutoresizingMaskIntoConstraints = false
        
        view.addSubview(leftLabel)
        view.addSubview(rightLabel)
        
        leftLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16).isActive = true
        leftLabel.trailingAnchor.constraint(equalTo: rightLabel.leadingAnchor).isActive = true
        leftLabel.topAnchor.constraint(equalTo: view.topAnchor, constant: 16).isActive = true
        
        // This is the important part
        leftLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
        
        rightLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16).isActive = true
        rightLabel.topAnchor.constraint(equalTo: leftLabel.topAnchor).isActive = true
        
        self.view = view
    }
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

Это сработало прекрасно! Большое спасибо.

Bryan Deemer 28.12.2020 22:41

если я хочу добавить новую строку, что мне делать?

sashatheitguy 22.01.2022 12:29

Другие вопросы по теме