我有以下视图层次结构:
根的高度和宽度已经被约束(顶部,底部,前导,尾随)拉伸,并且应该是大约500.子的高度也是由约束设置的,所以它也应该等于500。
一切看起来都不错,但是当我访问孩子的frame.bounds.height时,它会返回整个屏幕的高度,而不是估计的500.更糟糕的是,当我访问frame.bounds.height时Rootview它返回0,因为我已将帧设置为.Zero。
我现在的问题是,如何通过约束拉伸视图中的宽度和高度?在我看来,.frame.bounds不适用于autolayout。
展示:
print("collectionView height: ", String(describing: collectionView.frame.height) )
高度:0.0
CollectionView是棕色视图:
我的主要目标是制作一个与棕色collectionView一样大的单元格。但这失败了,因为我无法获得动态大小的collectionView的宽度。
答案 0 :(得分:0)
根据评论,看起来我帮助解决了这个问题。它可以归结为视图控制器"生命周期",以及#34;帧"已知"。
缩写生命周期是:
使用控制台和/或断点进行简单检查 - 这将显示以下几点:
from django.db import transaction
#signup form
def signup(request):
if request.method =='POST':
form = SignUpForm(request.POST)
if form.is_valid():
#atomic makes sure that the changes are only commited if the entire block of code is succesfully completed
with transaction.atomic():
new_user = form.save()
transaction_signup = Transaction(
user_debit = new_user,
user_credit = get_user_model().objects.get(id=1),
exchange_amount = 1,
currency_id = Curreny.objects.get(id=3)
)
transaction_signup.save()
#We want to log in the user after his sign up
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('/')
else:
form = SignUpForm()
return render(request, 'sign-up.html', {'SignUpForm': form})
知道边界,但它对框架一无所知。viewDidLoad
可能知道框架,但也多次调用(通常)。
viewWillLayoutSubviews
viewDidLayoutSubviews`而*可能不止一次被调用,是"保证"的最早时刻。框架大小。我被要求发布这个作为答案,但我在这里寻找更好的来源。我发现了两个 - 两个都是同一个问题的一部分。
前三个答案都很好(我更喜欢第三个答案,以便与这个问题进行最佳匹配。)
对于这个问题,它可以确定何时可以确定帧大小是已知的。 -
可能有效,但如果有效,viewWillLayoutSubviews
就是最佳选择。