小编Ale*_* S.的帖子

自动布局:获取UIImageView高度以正确计算单元格高度

到目前为止,我一直只是在单元格中使用自动调整大小的文本标签.我通常将约束放在所有边(内容视图或邻居)上,并将以下行添加到我的viewDidLoad():

// 190.0 is the actual height of my custom cell (see next image) in the storyboard containing a label and a randomly sized UIImageView
tableView.estimatedRowHeight = 190.0
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)

现在,当试图包含图像时,我遇到了几个问题.在一些研究中,我发现了几种用Objective-C编写的方法,但是我不确定哪些方法真正解决了我的核心问题,我仍在努力解决复杂的Objective-C代码问题.所以要恢复:我的最终目标是获得一个具有正确大小(正确的高度)单元格的表格,每个单元格包含一个符合屏幕宽度的标题和图像.那些图像可以具有不同的纵横比和不同的尺寸.为了简化一些挑战,我准备了一个新的,更简单的项目:

  1. 首先,我创建了一个UITableViewController和一个CustomCell类具有两个IBOutlets title: StringpostedImage: UIImage(随机的UIImage在故事板的尺寸)来配置所述细胞.我定义了边缘和彼此的约束.

  1. 构建时,两个单元格配置为包含相同的图像,但它们是从具有不同大小和分辨率的两个单独文件中获取的(900 x 171与半尺寸450 x 86).UIImage视图模式设置为"Aspect Fit",但由于我无法让它以我想要的方式运行到目前为止我不确定这是正确的设置.虽然我曾期望根据重新调整的UIImage计算单元格高度,包括我设置的约束,但它似乎是基于图像文件的初始高度(所以171和86).它实际上并没有适应实际的UIImage视图高度(大约70我猜).

两个单元格高度都基于初始图像文件高度而不是实际UIImage高度

在我的一个更复杂的项目中,我想要不同的图像自动适应屏幕的宽度,无论它们是纵向还是横向 - 如果它们的宽度小于屏幕的宽度,它们应该按比例放大.与上面的项目一样,每个单元格高度应符合故事板中约束所定义的各个内容.无论如何,它从上面讨论的问题开始:我怎样才能让这两个单元格具有相同的正确高度,拥抱故事板中定义的内容?

万分感谢您的帮助!

uitableview autolayout swift ios8

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

以编程方式更改自动布局约束后,视图未更新

事先我不得不说我实际上得到了我想要的可见效果,但不是令人满意的方式,因为现在,约束需要被"打破"而不是正确更新.

我有一个ViewController,它包含一个UITableView.它的高度tableView可以从0(不可见)到它所拥有的行数不等.通过将当前行数乘以行的高度,在ViewController的viewDidLoad()中计算高度.

我尝试的第一件事是创建一个@IBOutlet weak var tableHeightConstraint: NSLayoutConstraint!连接到故事板中设置的高度约束.它只有一些随机的初始高度,但它在ViewController中更新为正确的值,viewDidLoad()然后是在需要时更新视图的方法:

tableHeightConstraint = NSLayoutConstraint(item: tableView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 0, constant: calculatedTableViewHeight)

// At this point I've tried a variety of methods like the following two but actually none has worked for me
view.layoutIfNeeded()

// or
view.updateConstraints()

// or
view.layoutSubviews()
Run Code Online (Sandbox Code Playgroud)

...甚至在tableView上的相同方法只是为了确保以及将所有这些放入其中viewDidLayoutSubviews().

所以我接下来尝试的是创建与上面相同的约束,但不是更新我只是将它添加到视图中:view.addConstraint(tableHeightConstraint).这实际上具有所需的视觉效果,但在日志中我遇到了这两个高度限制的冲突,导致最初的一个突破.我的目标是获得正确而干净的代码,我一直在努力.所以这次我首先从视图中删除了约束,然后再次添加调整后的约束.从视觉上看,一切都很完美,但我仍然没有摆脱相互冲突的限制.

所以我的实际问题是(除了我到目前为止做错了)我怎么能 - 最好 - 只需更新一个现有的约束,然后在任何时候对视图及其子视图进行适当的更新/重新布局,无论是在我第一次加载时一个视图或我是否只想在用户交互时更改一些约束.非常感谢您的帮助!

constraints ios autolayout swift

18
推荐指数
1
解决办法
3万
查看次数

从 Github 包注册表安装私有包失败,未找到/未授权

我创建并发布了一个私有的 Github 包。首先尝试用纱线安装它,我面临以下问题:

无论我尝试使用 yarn 还是 npm,它都无法找到包,尽管遵循 Github 记录的确切步骤(https://help.github.com/en/github/managing-packages-with-github-package-registry/配置 npm-for-use-with-github-package-registry)。

我的.yarnrc

registry "https://npm.pkg.github.com/OWNER"

使用yarn,它会不断尝试查找包https://registry.yarnpkg.com/@GITHUB_USERNAME而不是我在上面输入的注册表。

备注:在.yarnrc注册表中需要按照稍微不同的语法添加:

registry "https://npm.pkg.github.com/"

到目前为止,我也开始尝试混合.npmrc.yarnrc配置,但没有运气。

——

编辑(部分解决)

我想出了如何使用 npm 或 - 在我的情况下 - 纱线来实际访问包。现在我遇到了Request failed \"401 Unauthorized\"错误的问题,尽管我在上面添加了凭据.yarnrc

//npm.pkg.github.com/:_authToken=AUTH_TOKEN

在里面做同样的.npmrc事情也行不通。

npm install.packages yarnpkg github-package-registry

17
推荐指数
2
解决办法
9624
查看次数

如何以正确的方式在Swift中调度函数?

我一直在努力,但我只是不明白.我对编程很陌生,所以几乎每一个新步骤都是一个实验.虽然在没有参数/返回的情况下调度普通闭包没有问题,但到目前为止我还没有理解如何处理带有(多个)参数并最终返​​回的函数.

为了获得正确的"解决方案"的逻辑,如果有人能够发布一个实际的例子,那将是很好的,所以我可以看到我是否已经完全正确.我会非常感谢任何帮助...如果其他一些实际例子以更好的方式说明了这个话题,请继续自己做!

假设我们想要将以下函数异步调度到具有低优先级的后台队列(或者我犯了错误,在定义函数时尝试实现调度而不是等到从其他地方调用它?!):

func mutateInt(someInt: Int) -> Int {
    "someHeavyCalculations"
    return result
}
Run Code Online (Sandbox Code Playgroud)

或者是一个带有多个参数的函数,它还会在某个时刻调用第一个函数(后台队列中的所有内容):

func someBadExample(someString: String, anotherInt: Int) -> Int {
    "someHeavyStuff"
    println(testString)
    mutateInt(testInt)
    return result
}
Run Code Online (Sandbox Code Playgroud)

或者应该确保在主队列上运行的UI函数(只是一个虚构的例子):

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {        
    let sectionInfo = self.fetchedResultsController.sections?[section] as NSFetchedResultsSectionInfo       
    return sectionInfo.numberOfObjects
}
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch swift ios8

12
推荐指数
1
解决办法
9173
查看次数

iOS模拟器崩溃而真实设备没有崩溃

我正在研究一个项目,其中包括几个集成为pod的库Cocoapods- 它已经有一段时间但我认为这个错误在我集成时首先出现Cocoapods并且从那时起就没有消失(所以我开始使用真实的设备来测试我的构建).

就像我提到的,我在任何真实设备上构建都没有问题但是在iOS模拟器上构建时我经常遇到以下错误.Xcode成功完成构建并启动模拟器,然后在尝试加载构建时立即崩溃.

dyld: Symbol not found: _ACAccountTypeIdentifierTwitter
  Referenced from: .../Library/Developer/CoreSimulator/Devices/28482AD6-B0F2-4FBF-B525-C1EA3F2E07FA/data/Containers/Bundle/Application/D9992D1D-FE14-4403-A9DC-E5C1BB787E9E/projectName.app/projectName
  Expected in: flat namespace
 in .../Library/Developer/CoreSimulator/Devices/28482AD6-B0F2-4FBF-B525-C1EA3F2E07FA/data/Containers/Bundle/Application/D9992D1D-FE14-4403-A9DC-E5C1BB787E9E/projectName.app/projectName
(lldb)
Run Code Online (Sandbox Code Playgroud)

我对更改链接选项持谨慎态度,因为当我首先遇到这个问题时,它也影响了Xcode本身的构建,然后由于一些难以理解的错误而一次又一次地失败.此外,我没有使用任何Twitter特定的代码,它似乎只是一个集成库的一部分.

任何帮助都非常感谢,因为我非常希望能够再次在模拟器上构建!

编辑1

建立阶段

构建设置

编辑2

dyld`_dyld_start:
    0x7fff6431d000 <+0>:   popq   %rdi
    0x7fff6431d001 <+1>:   pushq  $0x0
    0x7fff6431d003 <+3>:   movq   %rsp, %rbp
    0x7fff6431d006 <+6>:   andq   $-0x10, %rsp
    0x7fff6431d00a <+10>:  subq   $0x10, %rsp
    0x7fff6431d00e <+14>:  movl   0x8(%rbp), %esi
    0x7fff6431d011 <+17>:  leaq   0x10(%rbp), %rdx
    0x7fff6431d015 <+21>:  movq   0x37aec(%rip), %r8        ;     _dyld_start_static
    0x7fff6431d01c <+28>:  leaq   -0x23(%rip), %rcx         ; <+0>
    0x7fff6431d023 <+35>:  subq   %r8, %rcx
    0x7fff6431d026 …
Run Code Online (Sandbox Code Playgroud)

xcode runtime-error ios ios-simulator cocoapods

6
推荐指数
1
解决办法
423
查看次数

协议继承问题

我尝试建立各种可以协同工作的协议。不幸的是,我无法让它们按照我想要的方式工作。看下面的代码,我认为我的目标很明显:我想要求一个符合协议X的类。如果它符合协议Y,但协议Y继承自协议X,则它也应被视为一个符合性的类。 。相反,我收到以下编译错误

Unable to infer associated type 'VC' for protocol 'ViewModelType'

Inferred type 'ExampleViewControllerType' (by matching requirement 'viewController') is invalid: does not conform to 'ViewType'

当前设置:

protocol ViewModelType: class {
    associatedtype VC: ViewType
    weak var viewController: VC! { get set }
}

class ExampleViewModel: ViewModelType {
    weak var viewController: ExampleViewControllerType!
}

protocol ViewType: class { }    
protocol ExampleViewControllerType: ViewType { }

class ExampleViewController: UIViewController, ExampleViewControllerType { 

}
Run Code Online (Sandbox Code Playgroud)

protocols ios associated-types swift protocol-inheritance

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

在iOS/Safari中重新打开PWA时反复出现问题

我正在开发 PWA(VueJS/Quasar),并且在一段时间后重新打开应用程序(保存在主屏幕上)时,有时会遇到以下错误。

黑屏: A problem repeatedly occurred on "https://..."

我发现了一些提示(内存/性能、css 问题)和相关问题(例如iOS safari 崩溃(重复出现的问题)),但我还没有完全理解如何追踪该问题。

  1. 有没有人对如何解决它有明确的想法?如前所述,它只会偶尔发生一次。
  2. 虽然首先防止错误是当务之急,但有什么我可以做的,例如,一旦发生此错误,我可以重新加载应用程序,还是因为应用程序崩溃而完全无法控制?

mobile-safari reactjs vue.js progressive-web-apps quasar-framework

5
推荐指数
0
解决办法
1192
查看次数

如何为UITableViewRowAction设置多行标题

如何将UITableViewRowAction的标题字符串分成两行?...就像Apple在他们的邮件应用程序(iPhone)中做到的那样; 在电子邮件列表中向右滑动,您将看到两行写的"标记为未读"操作.

非常感谢!

uitableview ios

2
推荐指数
1
解决办法
863
查看次数

如何让函数A等到被调用的函数B结束

用户在地图视图中.当在地图上的某个地方长按时,会触发以下函数来设置新的注释,包括正确的标题.

func action(gestureRecognizer: UIGestureRecognizer) {

    if gestureRecognizer.state == UIGestureRecognizerState.Began {

        var newTouch: CGPoint = gestureRecognizer.locationInView(self.mapView)

        var newCoordinate: CLLocationCoordinate2D = mapView.convertPoint(newTouch, toCoordinateFromView: self.mapView)

        var newLocation = CLLocation(latitude: newCoordinate.latitude, longitude: newCoordinate.longitude)

        var newAnnotation = MKPointAnnotation()

        newAnnotation.coordinate = newCoordinate

        CLGeocoder().reverseGeocodeLocation(newLocation, completionHandler: {(placemarks, error) in

            if error != nil { println(error) }

            let p: CLPlacemark = placemarks[0] as CLPlacemark

            var thoroughfare: String? = p.thoroughfare

            var subThoroughfare: String? = p.subThoroughfare

            if p.thoroughfare == nil || p.subThoroughfare == nil {

                var date = NSDate()

                newAnnotation.title = …
Run Code Online (Sandbox Code Playgroud)

function swift

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