本文介绍了滚动到前沿的IOS-9 UIStackView问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为 UIStackView 实现滚动,其中有两个按钮可以水平添加和删除视图。我正在将 scroll.contentSize 更改为 UIStackView 的大小,所以当堆栈大小大于ScrollView的大小时,堆栈视图可以滚动。但滚动时我无法达到堆栈视图的开始。滚动时无法在开头看到我的几个视图,但可以到达最后的视图。

I am trying to implement scroll for UIStackView where there are two buttons to add and delete views horizontally. I am changing the scroll.contentSize as the size of UIStackView so when the stack size is greater than the ScrollView's size, stack view can be scrolled. But while scrolling I am not able to reach to the starting of stack view. Few of my views in the beginning can't be reached while scrolling but last views can be reached.

//In load view
    scroll = [[UIScrollView alloc]initWithFrame:CGRectMake(25,100, screen.size.width-50, 50)];
    scroll.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:scroll];
    scroll.scrollEnabled = YES;
    scroll.delegate = self;
    cus.center = CGPointMake(scroll.frame.size.width/2, scroll.frame.size.height/2);
    [scroll addSubview:cus];

    stack = [[UIStackView alloc]init];
    stack.axis = UILayoutConstraintAxisHorizontal;
    stack.distribution = UIStackViewDistributionEqualSpacing;
    stack.spacing = 30;
    stack.alignment = UIStackViewAlignmentLeading;
    stack.translatesAutoresizingMaskIntoConstraints = NO;
    [scroll addSubview:stack];

    [stack.centerXAnchor constraintEqualToAnchor:scroll.centerXAnchor].active = YES;
    [stack.centerYAnchor constraintEqualToAnchor:scroll.centerYAnchor].active = YES;

    a = 0;//this is used to count no of views currently present
//Completion of load view

    -(void)addOn//Action performing when clicking on add button.
    {
        UIView *vampire = [[UIView alloc]init];
        vampire.backgroundColor = [UIColor blackColor];
        [vampire.widthAnchor constraintEqualToConstant:40].active = YES;
        [vampire.heightAnchor constraintEqualToConstant:40].active = YES;
        vampire.layer.cornerRadius = 20;
        a = (int)stack.subviews.count;
        [stack addArrangedSubview:vampire];
        float contentWidth = ((a-1)*30+(a*40));
        scroll.contentSize = CGSizeMake(contentWidth,vampire.frame.size.height);
    }


    -(void)removeOn//Action performing when clicking on remove button.
    {
        if(a >=0)
        {
            remove.userInteractionEnabled = NO;
        UIView *view = stack.arrangedSubviews[a];
        [UIView animateWithDuration:.2
                              delay:0
                            options:UIViewAnimationOptionCurveEaseInOut
                         animations:^{
                             view.hidden = YES;

                         } completion:^(BOOL finished) {
                              a--;
                             [view removeFromSuperview];
                             float contentWidth = ((a-1)*30+(a*40));
                             scroll.contentSize = CGSizeMake(contentWidth,view.frame.size.height);
                             remove.userInteractionEnabled = YES;
                         }];
                   }
    }


推荐答案

@ maheswar-chinnu,您可以尝试 ScrollableStackView

@maheswar-chinnu, You can try ScrollableStackView : https://github.com/gurhub/ScrollableStackView

它是Objective-C和Swift兼容的库。它可以通过获得。

It's Objective-C and Swift compatible library. It's available through CocoaPods.

示例代码(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]; 
// ...

这篇关于滚动到前沿的IOS-9 UIStackView问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-17 14:04