Пользовательские представления не отображаются должным образом - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь показать 3 пользовательских вида на экране iOS, но отображается только один из них. 2-й из них начал показываться ненадлежащим образом после установки большого количества constraints, а третий совсем не отображается. Для теста я вызываю один и тот же вид три раза. Смотрите код. Я только начал делать iOs, так что простите меня, если я делаю какую-либо ошибку или очевидную ошибку.

Я попытался установить соответствующие ограничения, оставить прокрутку позади, но, похоже, ничего из этого не работает

I am getting this result Here is storyboard screenshot and constraints

У меня есть контейнер для удаления3 из storyboard, потому что, когда я его добавляю, контейнер2 даже не появляется. Пожалуйста, помогите мне с этой проблемой макета.

class TestCustomViewController: UIViewController {

@IBOutlet weak var container : UIView?

@IBOutlet weak var container2 : UIView?

@IBOutlet weak var container3 : UIView?

var testView: CustomView!
var testView2: CustomView!
var testView3: CustomView!
override func viewDidLoad() {
    super.viewDidLoad()
    ////////First View//////
   testView = createGearItemView()
    testView.frame = (container?.frame)!
    container?.addSubview(testView)
    /////////Second View//////
    testView2 = createGearItemView()
    testView2.frame = (container2?.frame)!
    container2?.addSubview(testView2)
    ////// THird View/////////
    testView3 = createGearItemView()
    testView3.frame = (container3?.frame)!
    container3?.addSubview(testView3)
}

func createGearItemView () -> CustomView {
    let view = (Bundle.main.loadNibNamed("CustomView", owner: nil, options: nil)?.first as? CustomView)!

    view.backgroundColor = UIColor.clear
    return view
}

}

1 Ответ

1 голос
/ 26 апреля 2019

За исключением того факта, что вам следует ознакомиться с Auto Layout (см. Общие сведения о Auto Layout ), вы должны использовать контейнеры 'bounds как frame s для ваших подпредставлений (хотя это может и не быть правильными еще в viewDidLoad):

testView.frame = (container?.bounds)!
...

Еще лучшим способом является использование автоматической компоновки для ваших подпредставлений вместо прямой установки frame s:

testView = createGearItemView()
container?.addSubview(testView)
testView.translatesAutoresizingMaskIntoConstraints = false
testView.topAnchor.constraint(equalTo: container!.topAnchor).isActive = true
testView.leadingAnchor.constraint(equalTo: container!.leadingAnchor).isActive = true
testView.bottomAnchor.constraint(equalTo: container!.bottomAnchor).isActive = true
testView.trailingAnchor.constraint(equalTo: container!.trailingAnchor).isActive = true
testView2...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...