Как сделать прокрутку UIStackView с помощью UIScrollView программно?

Я видел несколько решений для прокрутки UIStackView с помощью UIScrollView, но все они полагаются на Autolayout и IB.

Есть ли способ сделать это программно?

Я видел этот пример: https://gist.github.com/twostraws/a02d4cc09fc7bc16859c

Но он использует язык визуального формата, и я использую API привязки макета.

API привязки макета:

view.leadingAnchor.constraintEqualToAnchor(otherview.topAnchor).active = true

person Roymunson    schedule 17.06.2016    source источник
comment
По сути, вам нужно добавить представление стека в вид прокрутки и сделать представление содержимого представления прокрутки больше, чем рамка просмотра прокрутки, чтобы прокрутить представление прокрутки! Попробуйте указать безопасный размер экрана около 200x200 и не беспокойтесь об авторазметке.   -  person Teja Nandamuri    schedule 17.06.2016
comment
Не могли бы вы привести пример кода, чтобы я мог пометить его как ответ и реализовать?   -  person Roymunson    schedule 18.06.2016
comment
Я привел пример с использованием привязок макета в своем ответе на этот вопрос stackoverflow.com/questions/31668970.   -  person titaniumdecoy    schedule 12.09.2016
comment
Возможный дубликат Возможна ли прокрутка UIStackView?   -  person titaniumdecoy    schedule 12.09.2016


Ответы (2)


Я хотел сделать то же самое и наткнулся на этот отличный пост. Подводя итог , вставьте свой UIStackView в свой UIScrollView и продолжайте двигаться в том направлении, в котором вы думали, установив ограничения привязки UIStackView так, чтобы они соответствовали ограничениям UIScrollView:

stackView.leadingAnchor.constraintEqualToAnchor(scrollView.leadingAnchor).active = true
stackView.trailingAnchor.constraintEqualToAnchor(scrollView.trailingAnchor).active = true
stackView.bottomAnchor.constraintEqualToAnchor(scrollView.bottomAnchor).active = true
stackView.topAnchor.constraintEqualToAnchor(scrollView.topAnchor).active = true
stackView.widthAnchor.constraintEqualToAnchor(scrollView.widthAnchor).active = true
person Dalmazio    schedule 14.04.2017
comment
Связанный вопрос, но не дубликат: stackoverflow.com/questions/31668970/ - person Dalmazio; 14.04.2017

Вы можете попробовать ScrollableStackView: https://github.com/gurhub/ScrollableStackView

Пример кода (Swift)

import ScrollableStackView

var scrollable = ScrollableStackView(frame: view.frame)
view.addSubview(scrollable)

// add your views with 
let rectangle = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 55))
rectangle.backgroundColor = UIColor.blue
scrollable.stackView.addArrangedSubview(rectangle)
// ...

Пример кода (Objective-C)

@import ScrollableStackView

ScrollableStackView *scrollable = [[ScrollableStackView alloc] initWithFrame:self.view.frame];
scrollable.stackView.distribution = UIStackViewDistributionFillProportionally;
scrollable.stackView.alignment = UIStackViewAlignmentCenter;
scrollable.stackView.axis = UILayoutConstraintAxisVertical;
[self.view addSubview:scrollable];

UIView *rectangle = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 55)];
[rectangle setBackgroundColor:[UIColor blueColor]];

// add your views with
[scrollable.stackView addArrangedSubview:rectangle]; 
// ...

Надеюсь, поможет.

person mgyky    schedule 20.12.2016