- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于我所缺少的这个问题,可能有一个简单的解决方案,但我似乎找不到原因。
问题:每次我在我的 ScrollView 上调用 setContentSize 时,都会导致整个 ScrollView 框架移动。
问题:为什么每次调用setContentSize它的位置都会重置?以及如何让它停止?
注释:
MasterView.m(部分)
-(void)showPostShout{
CGRect newCCFrame = myCollapseClick.frame;//<----myCollapseClick is the UIScrollView
if (!postShoutOpen) {
newCCFrame.origin.y += 120;
[UIView animateWithDuration:.4 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.postShoutContainer.alpha = 1;
myCollapseClick.frame= newCCFrame;
} completion: ^(BOOL finished){
NSLog(@"finished!");
}];
} else{
newCCFrame.origin.y -= 120;
[UIView animateWithDuration:.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.postShoutContainer.alpha = 0;
myCollapseClick.frame= newCCFrame;
} completion: ^(BOOL finished){
NSLog(@"finished2!");
}];
}
postShoutOpen = !postShoutOpen;
}
CollapseableClick.m(违规部分?)
-(void)repositionCollapseClickCellsBelowIndex:(int)index withOffset:(float)offset {
for (int yy = index+1; yy < self.dataArray.count; yy++) {
CollapseClickCell *cell = [self.dataArray objectAtIndex:yy];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y + offset, cell.frame.size.width, cell.frame.size.height);
}
// Resize self.ContentSize
CollapseClickCell *lastCell = [self.dataArray objectAtIndex:self.dataArray.count - 1];
[self setContentSize:CGSizeMake(self.frame.size.width, lastCell.frame.origin.y + lastCell.frame.size.height + kCCPad)];
}
collapseableclick.m(整个)
//
// CollapseClick.m
// CollapseClick
//
// Created by Ben Gordon on 2/28/13.
// Copyright (c) 2013 Ben Gordon. All rights reserved.
//
#import "CollapseClick.h"
//#import "UIScrollView+SVPullToRefresh.h"
@implementation CollapseClick
@synthesize CollapseClickDelegate;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.isClickedArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
self.dataArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
[self reloadCollapseClick];
}
return self;
}
#pragma mark - Load Data
-(void)reloadCollapseClick {
// Set Up: Height
float totalHeight = 0;
// If Arrays aren't Init'd, Init them
if (!(self.isClickedArray)) {
self.isClickedArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
}
if (!(self.dataArray)) {
self.dataArray = [[NSMutableArray alloc] initWithCapacity:[CollapseClickDelegate numberOfCellsForCollapseClick]];
}
// Make sure they are clear
[self.isClickedArray removeAllObjects];
[self.dataArray removeAllObjects];
// Remove all subviews
for (UIView *subview in self.subviews) {
[subview removeFromSuperview];
}
// Add cells
for (int xx = 0; xx < [CollapseClickDelegate numberOfCellsForCollapseClick]; xx++) {
// Create Cell
///add delegate methods for agree/disagree debaters here
CollapseClickCell *cell = [CollapseClickCell newCollapseClickCellWithTitle:[CollapseClickDelegate titleForCollapseClickAtIndex:xx] stats:[CollapseClickDelegate statsForCollapseClick:xx] index:xx content:[CollapseClickDelegate viewForCollapseClickContentViewAtIndex:xx]];
// Set cell.TitleView's backgroundColor
if ([(id)CollapseClickDelegate respondsToSelector:@selector(colorForCollapseClickTitleViewAtIndex:)]) {
cell.TitleView.backgroundColor = [CollapseClickDelegate colorForCollapseClickTitleViewAtIndex:xx];
}
else {
cell.TitleView.backgroundColor = [UIColor colorWithWhite:0.4 alpha:1.0];
}
// Set cell.TitleLabel's Color
if ([(id)CollapseClickDelegate respondsToSelector:@selector(colorForTitleLabelAtIndex:)]) {
cell.TitleLabel.textColor = [CollapseClickDelegate colorForTitleLabelAtIndex:xx];
}
else {
cell.TitleLabel.textColor = [UIColor whiteColor];
}
// Set cell.TitleArrow's Color
if ([(id)CollapseClickDelegate respondsToSelector:@selector(colorForTitleArrowAtIndex:)]) {
[cell.TitleArrow drawWithColor:[CollapseClickDelegate colorForTitleArrowAtIndex:xx]];
}
else {
[cell.TitleArrow drawWithColor:[UIColor colorWithWhite:0.0 alpha:0.35]];
}
// Set cell.ContentView's size
cell.ContentView.frame = CGRectMake(0, kCCHeaderHeight + kCCPad, self.frame.size.width, cell.ContentView.frame.size.height);
// Set cell's size
cell.frame = CGRectMake(0, totalHeight, self.frame.size.width, kCCHeaderHeight);
// Add target to Button
[cell.TitleButton addTarget:self action:@selector(didSelectCollapseClickButton:) forControlEvents:UIControlEventTouchUpInside];
// Add cell
[self addSubview:cell];
// Add to DataArray & isClickedArray
[self.isClickedArray addObject:[NSNumber numberWithBool:NO]];
[self.dataArray addObject:cell];
// Calculate totalHeight
totalHeight += kCCHeaderHeight + kCCPad;
}
// Set self's ContentSize and ContentOffset
[self setContentSize:CGSizeMake(self.frame.size.width, totalHeight)];
[self setContentOffset:CGPointZero];
[[NSNotificationCenter defaultCenter] postNotificationName:@"CollapseClickUpdated" object: self ];
}
#pragma mark - Reposition Cells
-(void)repositionCollapseClickCellsBelowIndex:(int)index withOffset:(float)offset {
for (int yy = index+1; yy < self.dataArray.count; yy++) {
CollapseClickCell *cell = [self.dataArray objectAtIndex:yy];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y + offset, cell.frame.size.width, cell.frame.size.height);
}
// Resize self.ContentSize
CollapseClickCell *lastCell = [self.dataArray objectAtIndex:self.dataArray.count - 1];
[self setContentSize:CGSizeMake(self.frame.size.width, lastCell.frame.origin.y + lastCell.frame.size.height + kCCPad)];
}
#pragma mark - Did Click
-(void)didSelectCollapseClickButton:(UIButton *)titleButton {
BOOL isOpen = NO;
// Cell is OPEN -> CLOSED
if ([[self.isClickedArray objectAtIndex:titleButton.tag] boolValue] == YES) {
[self closeCollapseClickCellAtIndex:titleButton.tag animated:YES];
}
// Cell is CLOSED -> OPEN
else {
[self openCollapseClickCellAtIndex:titleButton.tag animated:YES];
isOpen = YES;
}
// Call delegate method
if ([(id)CollapseClickDelegate respondsToSelector:@selector(didClickCollapseClickCellAtIndex:isNowOpen:)]) {
[CollapseClickDelegate didClickCollapseClickCellAtIndex:titleButton.tag isNowOpen:isOpen];
}
}
#pragma mark - Open CollapseClickCell
-(void)openCollapseClickCellAtIndex:(int)index animated:(BOOL)animated {
// Check if it's not open first
if ([[self.isClickedArray objectAtIndex:index] boolValue] != YES) {
float duration = 0;
if (animated) {
duration = 0.25;
}
[UIView animateWithDuration:duration animations:^{
// Resize Cell
CollapseClickCell *cell = [self.dataArray objectAtIndex:index];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, cell.ContentView.frame.origin.y + cell.ContentView.frame.size.height + kCCPad);
// Change Arrow orientation
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2);
cell.TitleArrow.transform = transform;
// Change isClickedArray
[self.isClickedArray replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]];
// Reposition all CollapseClickCells below Cell
[self repositionCollapseClickCellsBelowIndex:index withOffset:cell.ContentView.frame.size.height + kCCPad];
}];
}
}
-(void)openCollapseClickCellsWithIndexes:(NSArray *)indexArray animated:(BOOL)animated {
// This works off of NSNumbers for each Index
for (int ii = 0; ii < indexArray.count; ii++) {
id indexID = indexArray[ii];
if ([indexID isKindOfClass:[NSNumber class]]) {
[self openCollapseClickCellAtIndex:[indexID intValue] animated:animated];
}
}
}
#pragma mark - Close CollapseClickCell
-(void)closeCollapseClickCellAtIndex:(int)index animated:(BOOL)animated {
// Check if it's open first
if ([[self.isClickedArray objectAtIndex:index] boolValue] == YES) {
float duration = 0;
if (animated) {
duration = 0.25;
}
[UIView animateWithDuration:duration animations:^{
// Resize Cell
CollapseClickCell *cell = [self.dataArray objectAtIndex:index];
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, kCCHeaderHeight);
// Change Arrow orientation
CGAffineTransform transform = CGAffineTransformMakeRotation(0);
cell.TitleArrow.transform = transform;
// Change isClickedArray
[self.isClickedArray replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:NO]];
// Reposition all CollapseClickCells below Cell
[self repositionCollapseClickCellsBelowIndex:index withOffset:-1*(cell.ContentView.frame.size.height + kCCPad)];
}];
}
}
-(void)closeCollapseClickCellsWithIndexes:(NSArray *)indexArray animated:(BOOL)animated {
// This works off of NSNumbers for each Index
for (int ii = 0; ii < indexArray.count; ii++) {
id indexID = indexArray[ii];
if ([indexID isKindOfClass:[NSNumber class]]) {
[self closeCollapseClickCellAtIndex:[indexID intValue] animated:animated];
}
}
}
#pragma mark - CollapseClickCell for Index
-(CollapseClickCell *)collapseClickCellForIndex:(int)index {
if ([[self.dataArray objectAtIndex:index] isKindOfClass:[CollapseClickCell class]]) {
return [self.dataArray objectAtIndex:index];
}
return nil;
}
#pragma mark - Scroll To Cell
-(void)scrollToCollapseClickCellAtIndex:(int)index animated:(BOOL)animated {
CollapseClickCell *cell = [self.dataArray objectAtIndex:index];
[self setContentOffset:CGPointMake(cell.frame.origin.x, cell.frame.origin.y) animated:animated];
}
#pragma mark - Content View for Cell
-(UIView *)contentViewForCellAtIndex:(int)index {
CollapseClickCell *cell = [self.subviews objectAtIndex:index];
return cell.ContentView;
}
@end
最佳答案
有一个简单的解决方案:关闭自动布局。
对我来说,我并没有为我的整个 Storyboard 关闭它,只是我加载了一个 Nib 。(打算用作整个站点的小部件。)问题解决了。
WWDC 2012 视频“Session 228 - Best Practices for Mastering Auto Layout”从 30 分 45 秒开始解释并解决了这个问题。
关于iOS:setContentSize 导致我的整个 UIScrollView 框架跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16864992/
我正在尝试使用 Spark 从 Cassandra 读取数据。 DataFrame rdf = sqlContext.read().option("keyspace", "readypulse
这是代码: void i_log_ (int error, const char * file, int line, const char * fmt, ...) { /* Get erro
我必须调试一个严重依赖 Gtk 的程序。问题是由于某些原因,在使用 GtkWindow 对象时开始出现许多运行时警告。问题是,即使 Gtk 提示严重错误,它也不会因这些错误而中止。我没有代码库的更改历
我正在尝试从已有效编译和链接的程序中检索二进制文件。我已经通过 GL_PROGRAM_BINARY_LENGTH 收到了它的长度。该文档说有两个实例可能会发生 GL_INVALID_OPERATION
我有一个托管在 Azure 环境中的服务。我正在使用控制台应用程序使用该服务。这样做时,我得到了异常: "The requested service, 'http://xxxx-d.yyyy.be/S
我有以下代码,它被 SEGV 信号杀死。使用调试器表明它被 main() 中的第一个 sem_init() 杀死。如果我注释掉第一个 sem_init() ,第二个会导致同样的问题。我试图弄清楚是什么
目前我正在编写一个应用程序(目标 iOS 6,启用 ARC),它使用 JSON 进行数据传输,使用核心数据进行持久存储。 JSON 数据由 PHP 脚本通过 json_encode 从 MySQL 数
我对 Xamarin.Forms 还是很陌生。我在出现的主页上有一个非常简单的功能 async public Task BaseAppearing() { if (UserID
这是我的代码的简化版本。 public class MainActivity extends ActionBarActivity { private ArrayList entry = new Arr
我想弄明白为什么我的两个 Java 库很难很好地协同工作。这是场景: 库 1 有一个类 A,其构造函数如下: public A(Object obj) { /* boilerplate */ } 在以
如果网站不需要身份验证,我的代码可以正常工作,如果需要,则在打印“已创建凭据”后会立即出现 EXC_BAD_ACCESS 错误。我不会发布任何内容,并且此代码是直接从文档中复制的 - 知道出了什么问题
我在使用 NSArray 填充 UITableView 时遇到问题。我确信我正在做一些愚蠢的事情,但我无法弄清楚。当我尝试进行简单的计数时,我得到了 EXC_BAD_ACCESS,我知道这是因为我试图
我在 UITableViewCell 上有一个 UITextField,在另一个单元格上有一个按钮。 我单击 UITextField(出现键盘)。 UITextField 调用了以下方法: - (BO
我有一个应用程序出现间歇性崩溃。崩溃日志显示了一个堆栈跟踪,这对我来说很难破译,因此希望其他人看到了这一点并能为我指出正确的方向。 基本上,应用程序在启动时执行反向地理编码请求,以在标签中显示用户的位
我开发了一个 CGImage,当程序使用以下命令将其显示在屏幕上时它工作正常: [output_view.layer performSelectorOnMainThread:@selector(set
我正在使用新的 EncryptedSharedPreferences以谷歌推荐的方式上课: private fun securePrefs(context: Context): SharedPrefe
我有一个中继器,里面有一些控件,其中一个是文本框。我正在尝试使用 jquery 获取文本框,我的代码如下所示: $("#").click(function (event) {}); 但我总是得到 nu
在以下场景中观察到 TTS 初始化错误,太随机了。 已安装 TTS 引擎,存在语音集,并且可以从辅助功能选项中播放示例 tts。 TTS 初始化在之前初始化和播放的同一设备上随机失败。 在不同的设备(
maven pom.xml org.openjdk.jol jol-core 0.10 Java 类: public class MyObjectData { pr
在不担心冲突的情况下,可以使用 MD5 作为哈希值,字符串长度最多为多少? 这可能是通过为特定字符集中的每个可能的字符串生成 MD5 哈希来计算的,长度不断增加,直到哈希第二次出现(冲突)。没有冲突的
我是一名优秀的程序员,十分优秀!