UIView 中的 iOS UIScrollView

标签 ios uiview uiscrollview

我有一个有点具体的问题。对于大多数人来说这可能无关紧要,但我不得不处理它并且我必须解决下面描述的问题。我尝试使用 Google 和 Apple SDK 文档查找有关它的一些信息,但没有成功。

我正在设计一个屏幕,其中有许多水平滚动的图像。有三个三个相同的卷轴。每个卷轴都有标题。我已经实现了派生自 UIView 的自定义类,并将 UIScrollView 用于滚动,将 UILabel 用于标题文本:

@interface MyView : UIView {
    UIScrollView *iScrollView;
    UIView       *iTitleView;
}

然后我将此类的对象放在 UIViewController 的 View 中:

@implementation MyViewController

- (void) viewDidLoad {
    [super viewDidLoad];
    ...
    iScrollViewTop = [[MyView alloc] init];
    [self.view addSubview:iScrollViewTop];
    ...
}

@end

当我用图像填充内部 ScrollView 并运行我的应用程序时,它看起来不错。但是有一些奇怪的行为。首先,滚动没有弹跳,就像我设置的一样

iScrollView.bounces = NO;

其次,当我滑动滚动时,滚动停止后,滚动条在一秒内没有消失。这对我来说很奇怪,因为当我通常创建一个 UIScrollView 并将其添加到 UIViewController 的 View 时,它会弹跳并且滚动条在停止时立即消失。我尝试更改 UIScrollView 的属性,例如 directionalLockEnabledpagingEnabledcanCancelContentTouchesdelaysContentTouchesdecelerationRate 等。事实上,我已经尝试更改 UIScrollView 的几乎所有属性,但我无法让滚动条立即消失。

如果我尝试将 UIScrollView 而不是 MyView 添加到 UIViewController.view,它会弹跳并且滚动条在停止后立即消失。如果我从 UIScrollView 继承 MyView ,我也会得到正确的行为,但在这种情况下,我无法管理标题标签,因为它会与其他内容一起滚动。

所以这是我的问题:

  1. 你知道我为什么会看到这种行为吗?
  2. 如何获得由 UIView 封装的滚动的“正常”行为?

最佳答案

好的,下面是骇人听闻的代码,所以请忽略我所有的其他问题,但请遵循此模式(westie.jpg = 360x200 的图像)

@interface MyView : UIView
{
UIScrollView *sv;
UILabel *l;
}
-(MyView*)initWithFrame:(CGRect)frame;
@end

@implementation MyView
-(MyView*)initWithFrame:(CGRect)frame;
{
self = [super initWithFrame:frame];
sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,360,200)];
sv.scrollEnabled = YES;
sv.contentSize = CGSizeMake(360*3,200);
[self addSubview:sv];

UIImage *i1 = [UIImage imageNamed:@"westie.jpg"];
UIImageView *iv1 = [[UIImageView alloc] initWithImage:i1];
iv1.frame = CGRectMake(360*0, 0, 360, 200);
[sv addSubview:iv1];
UIImageView *iv2 = [[UIImageView alloc] initWithImage:i1];
iv2.frame = CGRectMake(360*1, 0, 360, 200);
[sv addSubview:iv2];
UIImageView *iv3 = [[UIImageView alloc] initWithImage:i1];
iv3.frame = CGRectMake(360*2, 0, 360, 200);
[sv addSubview:iv3];

l = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 20)];
l.text = @"Hello World";
l.backgroundColor = [UIColor blueColor];
[self addSubview:l];

return self;
}

@结束

稍后,在您的外部 View 创建中:

[window addSubview:[[MyView alloc] initWithFrame:CGRectMake(0, 20, 360, 200)]];

关于UIView 中的 iOS UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5652276/

相关文章:

ios - 为什么 sizeThatFits 不能与 UILabel 一起使用?

swift - 以编程方式更改 UIScrollView 的 ContentInset 实际上不会改变任何内容

ios - 如果启用了自动布局,则防止 UIScrollView 水平滚动

ios - 预填充 RestKit 缓存

ios - 1 UIView 中的可能性肖像模式

ios - 将 AWS KMS AES-GCM key 与来自 iOS CommonCrypto 的 AES-CBC 算法结合使用

objective-c - 从 iOS 库中选择音乐并发送/保存

ios - UIButton 未接收触摸事件

ios - 无法在 Swift 中使用时间延迟为 UIImage 设置动画

ios - 以编程方式布置 UIScrollView,并为其 subview 添加自动布局,但它不滚动