小编Fis*_*cle的帖子

无法获得UIView sizeToFit来做任何有意义的事情

当我向a添加子视图UIView时,或者当我调整现有子视图的大小时,我希望[view sizeToFit][view sizeThatFits]反映出这种变化.但是,我的经验是sizeToFit什么都不做,并sizeThatFits在更改之前和之后返回相同的值.

我的测试项目有一个包含单个按钮的视图.单击该按钮会向视图添加另一个按钮,然后调用sizeToFit包含视图.在添加子视图之前和之后,视图的边界将转储到控制台.

- (void) logSizes {
 NSLog(@"theView.bounds: %@", NSStringFromCGRect(theView.bounds));
 NSLog(@"theView.sizeThatFits: %@", NSStringFromCGSize([theView sizeThatFits:CGSizeZero])); 
}

- (void) buttonTouched { 
 [self logSizes];
 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 btn.frame = CGRectMake(10.0f, 100.0f, 400.0f, 600.0f);
 [theView addSubview:btn];
 [theView sizeToFit];
 [self performSelector:@selector(logSizes) withObject:nil afterDelay:1.0];
}
Run Code Online (Sandbox Code Playgroud)

输出是:

2010-10-15 15:40:42.359 SizeToFit[14953:207] theView.bounds: {{0, 0}, {322, 240}}
2010-10-15 15:40:42.387 SizeToFit[14953:207] theView.sizeThatFits: {322, 240}
2010-10-15 15:40:43.389 SizeToFit[14953:207] theView.bounds: {{0, 0}, {322, 240}}
2010-10-15 15:40:43.391 SizeToFit[14953:207] …
Run Code Online (Sandbox Code Playgroud)

iphone resize uibutton uiview ios

36
推荐指数
2
解决办法
3万
查看次数

Google Drive API:列出没有父级的文件

我管理的Google域中的文件已陷入糟糕状态; 根目录中有数千个文件.我想识别这些文件并将它们移动到"我的驱动器"下面的文件夹中.

当我使用API​​列出其中一个孤立文件的父项时,结果是一个空数组.要确定文件是否是孤立的,我可以迭代我域中的所有文件,并请求每个文件的父项列表.如果列表为空,我知道该文件是孤立的.

但这非常缓慢.

无论如何使用Drive API来搜索没有父项的文件?

q参数的"parents"字段似乎对此没有用,因为它只能指定父列表包含一些ID.

更新:

我正在尝试找到一种快速方法来查找真正位于文档层次结构根目录的项目.也就是说,他们是"我的驱动器"的兄弟姐妹,而不是"我的驱动器"的孩子.

google-api google-api-client google-drive-api

8
推荐指数
1
解决办法
6703
查看次数

在Angular单元测试中使用enter键提交表单

我正在编写一个Angular 4组件的测试,它是一个登录表单.可以通过单击"提交"按钮或在任何输入字段中输入来提交表单.此行为由Angular表单指令决定.

我可以编写一个测试用例来验证按钮单击提交表单,但是我无法通过按键事件触发提交行为.

模板:

<form (ngSubmit)="onLoginSubmit()" #loginForm="ngForm">
<div class="form-group">
    <label for="userid">User ID</label>
    <input type="text" class="form-control" name="userid" id="userid" required
        [(ngModel)]="model.userId" #userid="ngModel">
    <div [hidden]="userid.valid || userid.untouched" class="alert alert-danger">
        User ID is required
    </div>
</div>
<div class="form-group">
    <label for="password">Password</label>
    <input type="password" class="form-control" name="password" id="password" required
        [(ngModel)]="model.password" #password="ngModel">
    <div [hidden]="password.valid || password.untouched" class="alert alert-danger">
        Password is required
    </div>
</div>
<button type="submit" class="btn btn-success" [disabled]="loginForm.form.invalid">Submit</button>    
Run Code Online (Sandbox Code Playgroud)

规格:

import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement, Component, ViewChild } …
Run Code Online (Sandbox Code Playgroud)

unit-testing angular2-forms angular-components angular angular-test

8
推荐指数
1
解决办法
1865
查看次数

为什么模拟会话中定义的DOS设备不会出现在资源管理器中

我有一个在本地系统帐户下运行的Windows服务,它使用DefineDosDevice函数创建DOS设备.该服务在W2K8远程桌面服务器上运行.如果使用服务的凭据创建设备,则它们将在GLOBAL设备命名空间中创建,因此对所有用户可见.我需要只对特定交互会话可见的设备.

我通过冒充我希望驱动器出现在其会话中的用户来实现此目的.如果会话ID可用,这是相当简单的.这是我编写的一个简单的测试应用程序来说明问题:

int _tmain(int argc, _TCHAR* argv[])
{
BOOL result = TRUE;

if(argc > 3 && !wcscmp(argv[2], L"/i"))
{
    HANDLE hToken = 0;
    DWORD dwSessionId = _wtoi(argv[3]);
    result = WTSQueryUserToken(dwSessionId, &hToken);
    if(result) result = ImpersonateLoggedOnUser(hToken);
}
if(result)
{
    LPTSTR drive = argv[1];
    DefineDosDevice(DDD_REMOVE_DEFINITION, drive, NULL);
    result = DefineDosDevice(0, drive, L"C:\\test");
}

if(!result)
{
    printf("Error: %d\n", GetLastError());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

为了测试这段代码,我创建了一个在LocalSystem帐户下启动命令shell的服务:

sc create test_svc binpath ="cmd/K start"type = own type = interact

此服务无法启动,但在失败之前,它会生成在LocalSystem帐户下运行的命令shell.

从LocalSystem cmd.exe,我运行:

MySubst.exe x:/ i 2

调用ImpersonateLoggedOnUser(),然后调用DefineDosDevice() …

windows impersonation winapi remote-desktop terminal-services

5
推荐指数
1
解决办法
989
查看次数