UITableView标题覆盖(UIView)表现奇怪到滚动

时间:2012-12-26 20:42:07

标签: ios uitableview uiview

我overrode(这是一个真正的词?不管)我的UITableView标题,在整个应用程序中使用了常用的UIView。 它没什么大不了的,只有背面坚实的背景,预先选择的字体,字体大小,字体重量,字体颜色等等,这真的是它也有它。事实上,这是UIView

TableSectionView.h

#import <UIKit/UIKit.h>

@interface TableSectionView : UIView {
    NSString *textLabel;
    UIColor *textColor;
    UIColor *backgroundColor;
    BOOL bold;
    NSString *textFont;
    NSInteger textSize;
}


@property (nonatomic, retain) NSString *textLabel, *textFont;
@property (nonatomic, retain) UIColor *textColor, *backgroundColor;
@property (nonatomic) BOOL bold;
@property (nonatomic) NSInteger textSize;

- (id)initWithFrame:(CGRect)frame andText:(NSString*)text;

@end

TableSectionView.m

#import "TableSectionView.h"

@implementation TableSectionView

@synthesize textLabel, backgroundColor, textColor, bold, textFont, textSize;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(id)initWithFrame:(CGRect)frame andText:(NSString *)text {

    self = [self initWithFrame:frame];
    if(self) {

        textLabel = text;
        textFont = @"Arial-BoldMT";
        textSize = 16;
        textColor = [[UIColor alloc] initWithRed:1 green:1 blue:1 alpha:1];
        backgroundColor = [[UIColor alloc] initWithRed:0 green:0 blue:0 alpha:0.8];

    }
    return self;

}

-(void)layoutSubviews {
    [super layoutSubviews];

    UILabel *title = [[UILabel alloc] initWithFrame:self.frame];

    title.text = [NSString stringWithFormat:@"  %@", textLabel];
    title.font = [UIFont fontWithName:textFont size:textSize];
    title.textColor = textColor;
    title.backgroundColor = backgroundColor;

    [self addSubview:title];

}

@end

以及我如何在文件中使用它:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    return [[TableSectionView alloc] initWithFrame:CGRectZero andText:@"Table Section Title"];
}

这里没什么奇怪或独特的。

而且这个工作,它没有问题,它出现就好了。滚动表格视图时会发生什么。 向上滚动时,节标题向下移动并保持不变。速度越高,部分标题向下移动并保持在那里直到你回到桌面顶部。 这个应用程序有大约25个单独的表视图这个标题是分开的,我真的想要尽快压缩这个渲染错误。

我想张贴截图,但由于严格的保密协议,我不被允许不会被解雇的风险。 但这里有一个可视化问题的东西。我已经模糊了所有的文字,对不起我别无选择:\

enter image description here

黑色条是节标题,图像顶部是UITableView的顶部。请注意该节标题是DOWN,与它应该在哪里相比? (顶部,与正常部分标题一样)。我只是不知道该怎么做

1 个答案:

答案 0 :(得分:2)

我认为你的问题在这里:

-(void)layoutSubviews {
    [super layoutSubviews];

    UILabel *title = [[UILabel alloc] initWithFrame:self.frame];

    title.text = [NSString stringWithFormat:@"  %@", textLabel];
    title.font = [UIFont fontWithName:textFont size:textSize];
    title.textColor = textColor;
    title.backgroundColor = backgroundColor;

    [self addSubview:title];

}

在layoutSubviews中添加子视图很奇怪。为什么不在initWithFrame中执行此操作以避免混淆Cocoa的呈现代码?

编辑:这也可以避免保存所有这些成员变量,声明所有这些属性&amp;合成它们:)

编辑2:当你初始化UILabel时,你应该使用self.bounds而不是self.frame作为参考。