У меня есть вид прокрутки, вложенный внутри контроллера просмотра, который находится в контейнере. View Controller, который использует указанный класс под названием ScrollingViewController
выглядит следующим образом:Ограничения и рамки автоматической компоновки iOS не работают
class ScrollingViewController: UIViewController {
@IBOutlet weak var scrollView: UIScrollView! //outlet for the Scroll View
override func viewDidLoad() {
super.viewDidLoad()
// 1) Create the two views used in the swipe container view
var storyboard = UIStoryboard(name: "App", bundle: nil)
var subOne: SubProfileOneViewController = storyboard.instantiateViewControllerWithIdentifier("subone") as! SubProfileOneViewController
var subTwo: SubProfileTwoViewController = storyboard.instantiateViewControllerWithIdentifier("subtwo") as! SubProfileTwoViewController
// 2) Add in each view to the container view hierarchy
// Add them in opposite order since the view hierarchy is a stack
self.addChildViewController(subTwo);
self.scrollView!.addSubview(subTwo.view);
subTwo.didMoveToParentViewController(self);
self.addChildViewController(subOne);
self.scrollView!.addSubview(subOne.view);
subOne.didMoveToParentViewController(self);
// 3) Set up the frames of the view controllers to align
// with each other inside the container view
var adminFrame :CGRect = subOne.view.frame;
adminFrame.origin.x = adminFrame.width;
subTwo.view.frame = adminFrame;
// 4) Finally set the size of the scroll view that contains the frames
var scrollWidth: CGFloat = 2 * self.view.frame.width
var scrollHeight: CGFloat = 262
self.scrollView!.contentSize = CGSizeMake(scrollWidth, scrollHeight);
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
В основном то, что происходит в том, что два View контроллеры, которые используют этот класс SubProfileOneViewController
и SubProfileTwoViewController
, соответственно, в настоящее время экземпляры в subOne
и subTwo
. Затем они добавляются в список прокрутки в виде дочерних элементов, чтобы создать интерфейс, в котором пользователь может прокручивать прямо, чтобы получить доступ к другому виду (почти как Snapchat). subOne
и subTwo
должны быть бок о бок, и пользователь должен иметь возможность переходить от одного к другому и наоборот.
Вот что все это выглядит как на моей раскадровки:
SubProfileOneViewController
и SubProfileTwoViewController
имеют вид (в лице зеленого и красного цвета, соответственно) и имеют те же самые точные ограничения, которые: высота = 262, волоча space to superview = 0, Ведущее пространство для супервизора = 0, Верхнее пространство для супервизора = 0
В идеале при запуске должно быть два вида, один зеленый и один красный, и пользователь должен иметь возможность прокручивать между ними , Однако, вот что на самом деле происходит:
зеленый и красный вид не занимают всю ширину экрана, а вместо этого конденсируются в небольшой полоске на левой стороне, и большинство View Controllers белые вместо их соответствующий цвет. Я пробовал много вещей, и я не уверен, что я делаю неправильно.
(кредит для кода в ScollingViewController
идет к lbrendanl на GitHub, связаны здесь: https://github.com/lbrendanl/SwiftSwipeView)
какие ограничения вы использовали для просмотра контейнеров внутри scrollview. можете ли вы опубликовать образец проекта? –
Я бы добавил один UIView (contentView) в ваш 'UIScrollView'. Затем добавьте представления дочернего контроллера в представление содержимого. Добавьте ограничения для ваших дочерних представлений, которые привязывают их верхнюю и нижнюю к представлению содержимого. Для просмотра одного, закрепите ведущий к представлению содержимого, затем закрепите его трейлинг для просмотра двух ведущих. Наконец, вы увидите два вывода, идущие к представлению содержимого. Чтобы заставить ширины быть правыми, вам нужны ограничения для ширины для просмотра одного и просмотреть два: или добавить ограничение ширины для contentView, чтобы быть x2 на экране, и добавить ограничения для просмотра одного и просмотреть два с одинаковой шириной. –