Nano Hash - криптовалюты, майнинг, программирование

Кадр представления вызывается дважды и вызывает ошибку отсечения

У меня есть базовый UIView, который имеет visualEffectView в качестве подвида. Я устанавливаю view frame.height в visualEffectView как 80. При представлении ViewController я хочу сбросить его высоту до 120. В настоящее время при представлении высота изначально равна 120, но затем быстро обрезается до 80. Не должен ли мой кадр в мой ViewController переопределяет набор кадров в UIView? Мой кадр в ViewController вызывается первым, но позже он вызывается из UIView, вызывая ошибку отсечения.

class CardView: UIView {

let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))

override init(frame: CGRect) {
    super.init(frame: frame)
    clipsToBounds = true
    addSubview(visualEffectView)
}

override func layoutSubviews() {
    super.layoutSubviews()

    visualEffectView.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 80)

  }
}

class ViewController: ViewController {

let cardView: CardView = {
    let cv = CardView()
    cv.imageView.clipsToBounds = true
    cv.layer.cornerRadius = 18
    return cv
}()

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let superviewFrame = view.frame.height
    cardView.frame = CGRect(x: 10, y: superviewFrame / 8, width: view.frame.width - 20, height: superviewFrame - (superviewFrame / 5))
    cardView.visualEffectView.anchor(top: cardView.topAnchor, left: cardView.leftAnchor, bottom: nil, right: cardView.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 120)     
  }
}
28.03.2019

  • попробуйте установить для cardView.visualEffectView.translatesAutoresizingMaskIntoConstraints значение false или откажитесь от всего фреймового подхода и вместо этого используйте ограничения. 28.03.2019
  • Вы ссылаетесь на свои ограничения в своем вопросе, но не используете их. В вашем коде не используется автоматическая компоновка, как и должно быть. Кроме того, создание подкласса UIView может быть сложным процессом, и я бы посоветовал прочитать stackoverflow.com/questions/15978370/ Вероятно, вы захотите использовать метод жизненного цикла updateConstraints в пользовательском представлении. 28.03.2019
  • при использовании ограничений привязки размер даже не регулируется. 28.03.2019
  • мои извинения, я все еще изучаю жаргон. Я думал, что установка высоты кадра была ограничением. 28.03.2019
  • Без проблем. При позиционировании и изменении размера представления вы хотите попытаться избежать этого в свойстве кадра представления. Позвольте автоматической компоновке сделать это за вас. 28.03.2019
  • Я отредактировал код, чтобы использовать ограничения. но высота визуального эффекта даже не меняется, как для кадра. Я попытался установить его в updateViewConstraints(), но он также ничего не делает. 28.03.2019
  • У вас здесь много всего происходит, и вам нужно многому научиться, прежде чем создавать подклассы UIView, ИМО. Начните с пустого контроллера представления и просто добавьте к нему простое представление (забудьте на мгновение о подклассах). Узнайте о жизненном цикле UIViewController и о том, какие методы когда вызываются. Узнайте, как работает автоматическая компоновка и как правильно добавлять ограничения. Затем попытайтесь манипулировать этим простым видом, чтобы он делал то, что вы хотите. Как только вы освоитесь с этим, переходите к представлениям подклассов. Применяйте фреймворк iOS шаг за шагом, потому что он может стать непосильным. 28.03.2019
  • Также изучите терминологию. Например, когда вы говорите «присутствует», это имеет особое значение в UIKit; это означает модальное представление контроллера представления из другого. Также установите общие правила при работе с объектами и какие объекты должны иметь господство над другими. Например, если ваш контроллер представления отображает представление с начальной высотой 80, какой объект должен отвечать за установку этого значения, контроллер представления или само представление? Вы устанавливаете угловой радиус своего пользовательского представления в контроллере представления, но не должно ли представление определять свой собственный стиль? 28.03.2019
  • причина, по которой я установил его в ViewController, заключается в том, что я использую UIView в нескольких ViewController. Но в каждом ViewController это немного отличается. Я пытаюсь повторно использовать код настолько, насколько это возможно. Я столкнулся с этой проблемой, и мне было просто любопытно, что происходит. 28.03.2019

Ответы:


1

попробуйте переместить этот код

visualEffectView.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 80)

с override func layoutSubviews() { по override init(frame: CGRect) {

после super.init()

28.03.2019
  • все еще не работает. вид карты также находится в другом представлении контейнера. это может быть проблемой? 28.03.2019

  • 2

    Вам может понадобиться охранное условие, и если есть ограничение, просто пройдите.

        override func layoutSubviews() {
        super.layoutSubviews()
    
        guard visualEffectView.constraintsAffectingLayout(for: .vertical).count == 0 else  {return}. // Here
    
        visualEffectView.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 80)
    }
    
    28.03.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..