处理滚动底部问题

This commit is contained in:
2026-01-29 14:42:49 +08:00
parent 25fbe9b64e
commit 32ebc6fb65
12 changed files with 174 additions and 26 deletions

View File

@@ -34,7 +34,7 @@ NS_ASSUME_NONNULL_BEGIN
@property(nonatomic, assign) NSInteger likeCount;
/// 是否已点赞
@property(nonatomic, assign) BOOL isLiked;
@property(nonatomic, assign) BOOL liked;
/// 创建时间(时间戳)
@property(nonatomic, assign) NSTimeInterval createTime;

View File

@@ -21,10 +21,6 @@
};
}
- (void)setLiked:(NSInteger)liked {
// NSInteger (0/1) BOOL
_isLiked = (liked == 1);
}
- (void)setCreatedAt:(NSString *)createdAt {
//

View File

@@ -43,8 +43,14 @@ typedef NS_ENUM(NSInteger, KBAiChatMessageType) {
/// 是否需要打字机效果(只有当前正在输入的消息才需要)
@property (nonatomic, assign) BOOL needsTypewriterEffect;
/// 是否处于加载状态(用户消息)
@property (nonatomic, assign) BOOL isLoading;
#pragma mark - 便捷构造方法
/// 创建加载中的用户消息
+ (instancetype)loadingUserMessage;
/// 创建用户消息
+ (instancetype)userMessageWithText:(NSString *)text;

View File

@@ -9,12 +9,23 @@
@implementation KBAiChatMessage
+ (instancetype)loadingUserMessage {
KBAiChatMessage *message = [[KBAiChatMessage alloc] init];
message.type = KBAiChatMessageTypeUser;
message.text = @"";
message.timestamp = [NSDate date];
message.isComplete = NO;
message.isLoading = YES;
return message;
}
+ (instancetype)userMessageWithText:(NSString *)text {
KBAiChatMessage *message = [[KBAiChatMessage alloc] init];
message.type = KBAiChatMessageTypeUser;
message.text = text;
message.timestamp = [NSDate date];
message.isComplete = YES;
message.isLoading = NO;
return message;
}
@@ -28,6 +39,7 @@
message.audioDuration = duration;
message.audioData = audioData;
message.isComplete = NO;
message.isLoading = NO;
return message;
}
@@ -41,6 +53,7 @@
message.audioDuration = 0;
message.audioData = nil;
message.isComplete = NO;
message.isLoading = NO;
return message;
}
@@ -53,6 +66,7 @@
message.audioDuration = 0;
message.audioData = nil;
message.isComplete = NO;
message.isLoading = NO;
return message;
}
@@ -61,6 +75,7 @@
message.type = KBAiChatMessageTypeTime;
message.timestamp = timestamp;
message.isComplete = YES;
message.isLoading = NO;
return message;
}