我遇到了有关UIScrollView的问题。我正在制作一个继承UIView的自定义视图。该视图有一个UIScrollView,其中有许多按钮可以向左和向右滚动。 UIScrollView和按钮可以正常显示。但我无法滚动按钮。有人可以给我一些建议吗?非常感谢!
MZMPhotoCalenderSwitcher.h
#import <UIKit/UIKit.h>
@interface MZMPhotoCalenderSwitcher : UIView <UIScrollViewDelegate>
@property (strong, nonatomic) UIScrollView *topSwitcher;
@end
MZMPhotoCalenderSwitcher.m
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.topSwitcher = [[UIScrollView alloc] initWithFrame:CGRectMake(0, LABEL_HEIGHT + VIEW_Y, self.view.bounds.size.width, TOP_SWITCHER_HEIGHT)];
self.topSwitcher.backgroundColor = [UIColor greenColor];
self.topSwitcher.pagingEnabled = YES;
self.topSwitcher.showsHorizontalScrollIndicator = NO;
self.topSwitcher.showsVerticalScrollIndicator = NO;
[self add:3 ButtonsOnView:self.topSwitcher withButtonWidth:44.8f andHeight:20.0f];
}
- (void)add:(int)num ButtonsOnView:(UIScrollView *)view withButtonWidth:(CGFloat)width andHeight:(CGFloat)height
{
CGFloat totalTopSwitcherWidth = num * width;
[view setContentSize:CGSizeMake(totalTopSwitcherWidth, view.bounds.size.height)];
CGFloat xOffset = 0.0f;
for (int i=1; i<=num; i++)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(xOffset, 0, width, height)];
xOffset += width;
[button setTitle:[NSString stringWithFormat:@"%d", i] forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize:10];
[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
[button setTag:i];
[button addTarget:self action:@selector(buttonEvent) forControlEvents:UIControlEventTouchUpInside];
if (i % 2 == 0)
[button setBackgroundColor:[UIColor yellowColor]];
else
[button setBackgroundColor:[UIColor redColor]];
[view addSubview:button];
}
}
答案 0 :(得分:5)
以下行
[view addSubview:button];
添加
view.contentSize = CGSizeMake(view.contentSize.width, button.frame.origin.y + button.frame.size.height);
这会将滚动视图的内容大小设置为按钮的底部。
答案 1 :(得分:1)
应该是内容大小问题,还要检查UIScrollView对象的scrollEnabled属性是否设置为TRUE,
的解决方案答案 2 :(得分:1)
只需在项目中禁用“自动布局”,它就会开始工作!
答案 3 :(得分:1)
将所有这些建议合并为一个简单的答案:
//在viewDidLoad
中// set the size of the scrollview (in this case I made it the size of its container
self.scrollView.frame = self.view.frame;
// now set the size of the content to be scrolled within the scrollview
// the content to be displayed must be bigger than the scrollView
// in this case I added 100 to make the content size, so that it is taller than the height of the scrollView
// now it scrolls
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, self.scrollView.frame.size.height + 100);
答案 4 :(得分:0)
你在SuperVIew上添加ScrollView的位置?你在哪里重新计算scrollView的内容大小属性?
[view setContentSize:CGSizeMake(<summYourViews.width>,<summYourViews.height>)];
答案 5 :(得分:0)
您的问题是您没有设置contentSize,因此,contentSize与帧视图相同。
您需要在viewDidLoad
中执行此操作- (void)viewDidLoad {
........
self.scrollView.contentSize = CGSizeMake(/*yourWidth*/, /*yourHeight/*);
........
}
尝试将contentSize调整到对象的最后位置加上其大小加上填充。
答案 6 :(得分:0)
您必须设置scrollview框架大小和内容大小。
答案 7 :(得分:0)
试试这个。 。 。 。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.topSwitcher = [[UIScrollView alloc] initWithFrame:CGRectMake(0, LABEL_HEIGHT + VIEW_Y, self.view.bounds.size.width, TOP_SWITCHER_HEIGHT)];
self.topSwitcher.backgroundColor = [UIColor greenColor];
self.topSwitcher.pagingEnabled = YES;
self.topSwitcher.showsHorizontalScrollIndicator = NO;
self.topSwitcher.showsVerticalScrollIndicator = NO;
[topSwitcher setContentSize:CGPointMake(self.view.bounds.size.width,TOP_SWITCHER_HEIGHT+400)];
[self add:3 ButtonsOnView:self.topSwitcher withButtonWidth:44.8f andHeight:20.0f];
}
答案 8 :(得分:0)
太棒了。
我只是将viewDidLoad中的代码移动到initWithFrame:,然后就可以了。我不知道为什么会这样?
答案 9 :(得分:0)
我现在正在使用Xcode 6 / iOS 8+并启用了自动布局,我首先遇到了同样的问题,删除自动布局根本不起作用,所以为了制作滚动视图垂直滚动,我确定了以下内容:
滚动视图内容大小高度必须大于屏幕 身高,这几乎不用说......
滚动视图的上/下/左/右约束是必须的 固定,我使用故事板这样做,所以没有代码显示在这里
如果要使滚动视图水平滚动,请确保其内容大小宽度大于屏幕宽度,另一个规则也适用。
这对我有用,希望它可以帮助别人。